```
Row Filtering
There can be multiple filters, a filter can match multiple columns (wildcard).
The semantics should be:
For row keep filters, if all filters match, the row is kept.
For row drop filters, if any filter matches, the row is dropped.
For an individual filter that specifies multiple columns, there is a match if any column matches.
Prior to PR 1433, the semantics for keep/drop were reversed; the semantics for multiple columns was correct.
PR 1433 corrected the semantics for keep/drop but broke the semantics for multiple columns.
This PR corrects the semantics for multiple columns.
```
When multiple filter expressions are defined:
GAM_CSV_ROW_FILTER - should match only if all expressions match
GAM_CSV_ROW_DROP_FILTER - should match if any expression matches
Currently, the opposite is true
* Document member restrictions
* Fix gam print users allfields custom all to include primaryEmail
If you really want everything say: gam print users full
* agreedToTerms is now read-only
* Fix sync devices
* assetTag if specified is part of sync device key
* Handle missing assetTags
* Leave agreedtoterms as an undocumented option
* More assetTag processing, the field is not returned from the API if it's empty
* Fix DriveFileAttribute formatting
* memberKey has been replaced by preferredMemberKey
* Correct license name
* If notdemail.txt is present, write_csv_file will not send an email
* Initialize pageToken for each namespace
* Update group sync to do removes before adds
This gets around problem when a group contains a primary address and a sync is performed with an alias. With adds first you get a duplicate error; with removes first the primary address in the group is replaced with the alias.
* Add defaultsender to group settings