Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
d9cfebd8
authored
Sep 28, 2021
by
tonihei
Committed by
bachinger
Sep 29, 2021
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Update initial network bandwidth estimates.
PiperOrigin-RevId: 399444511
parent
5ae29821
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
195 additions
and
193 deletions
library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java
library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultBandwidthMeter.java
View file @
d9cfebd8
...
...
@@ -51,27 +51,27 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
/** Default initial Wifi bitrate estimate in bits per second. */
public
static
final
ImmutableList
<
Long
>
DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI
=
ImmutableList
.
of
(
6_200_000L
,
3_900_000L
,
2_300_000L
,
1_300_000L
,
62
0_000L
);
ImmutableList
.
of
(
5_400_000L
,
3_300_000L
,
2_000_000L
,
1_300_000L
,
76
0_000L
);
/** Default initial 2G bitrate estimates in bits per second. */
public
static
final
ImmutableList
<
Long
>
DEFAULT_INITIAL_BITRATE_ESTIMATES_2G
=
ImmutableList
.
of
(
248_000L
,
160_000L
,
142_000L
,
127_000L
,
113
_000L
);
ImmutableList
.
of
(
1_700_000L
,
820_000L
,
450_000L
,
180_000L
,
130
_000L
);
/** Default initial 3G bitrate estimates in bits per second. */
public
static
final
ImmutableList
<
Long
>
DEFAULT_INITIAL_BITRATE_ESTIMATES_3G
=
ImmutableList
.
of
(
2_
200_000L
,
1_300_000L
,
950_000L
,
760_000L
,
52
0_000L
);
ImmutableList
.
of
(
2_
300_000L
,
1_300_000L
,
1_000_000L
,
820_000L
,
57
0_000L
);
/** Default initial 4G bitrate estimates in bits per second. */
public
static
final
ImmutableList
<
Long
>
DEFAULT_INITIAL_BITRATE_ESTIMATES_4G
=
ImmutableList
.
of
(
4_400_000L
,
2_300_000L
,
1_500_000L
,
1_100_000L
,
64
0_000L
);
ImmutableList
.
of
(
3_400_000L
,
2_000_000L
,
1_400_000L
,
1_000_000L
,
62
0_000L
);
/** Default initial 5G-NSA bitrate estimates in bits per second. */
public
static
final
ImmutableList
<
Long
>
DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA
=
ImmutableList
.
of
(
10_000_000L
,
7_200_000L
,
5_000_000L
,
2_700_000L
,
1_6
00_000L
);
ImmutableList
.
of
(
7_500_000L
,
5_200_000L
,
3_700_000L
,
1_800_000L
,
1_1
00_000L
);
/** Default initial 5G-SA bitrate estimates in bits per second. */
public
static
final
ImmutableList
<
Long
>
DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA
=
ImmutableList
.
of
(
2_600_000L
,
2_200_000L
,
2_000_000L
,
1_500_000L
,
47
0_000L
);
ImmutableList
.
of
(
3_300_000L
,
1_900_000L
,
1_700_000L
,
1_500_000L
,
1_20
0_000L
);
/**
* Default initial bitrate estimate used when the device is offline or the network type cannot be
...
...
@@ -465,243 +465,245 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList
createInitialBitrateCountryGroupAssignment
()
{
return
ImmutableListMultimap
.<
String
,
Integer
>
builder
()
.
putAll
(
"AD"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"AE"
,
1
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"AF"
,
4
,
4
,
3
,
4
,
2
,
2
)
.
putAll
(
"AG"
,
4
,
2
,
1
,
4
,
2
,
2
)
.
putAll
(
"AE"
,
1
,
4
,
4
,
4
,
3
,
2
)
.
putAll
(
"AF"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"AG"
,
2
,
3
,
1
,
2
,
2
,
2
)
.
putAll
(
"AI"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"AL"
,
1
,
1
,
1
,
1
,
2
,
2
)
.
putAll
(
"AM"
,
2
,
2
,
1
,
3
,
2
,
2
)
.
putAll
(
"AO"
,
3
,
4
,
3
,
1
,
2
,
2
)
.
putAll
(
"AR"
,
2
,
4
,
2
,
1
,
2
,
2
)
.
putAll
(
"AS"
,
2
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"AT"
,
0
,
1
,
0
,
0
,
0
,
2
)
.
putAll
(
"AU"
,
0
,
2
,
0
,
1
,
1
,
2
)
.
putAll
(
"AW"
,
1
,
2
,
0
,
4
,
2
,
2
)
.
putAll
(
"AL"
,
1
,
2
,
0
,
1
,
2
,
2
)
.
putAll
(
"AM"
,
2
,
3
,
2
,
4
,
2
,
2
)
.
putAll
(
"AO"
,
3
,
4
,
3
,
2
,
2
,
2
)
.
putAll
(
"AQ"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"AR"
,
2
,
4
,
1
,
1
,
2
,
2
)
.
putAll
(
"AS"
,
2
,
2
,
2
,
3
,
2
,
2
)
.
putAll
(
"AT"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"AU"
,
0
,
1
,
0
,
1
,
2
,
2
)
.
putAll
(
"AW"
,
1
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"AX"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"AZ"
,
3
,
3
,
3
,
4
,
4
,
2
)
.
putAll
(
"BA"
,
1
,
1
,
0
,
1
,
2
,
2
)
.
putAll
(
"AZ"
,
3
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"BA"
,
1
,
2
,
0
,
1
,
2
,
2
)
.
putAll
(
"BB"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"BD"
,
2
,
0
,
3
,
3
,
2
,
2
)
.
putAll
(
"BE"
,
0
,
0
,
2
,
3
,
2
,
2
)
.
putAll
(
"BF"
,
4
,
4
,
4
,
2
,
2
,
2
)
.
putAll
(
"BG"
,
0
,
1
,
0
,
0
,
2
,
2
)
.
putAll
(
"BH"
,
1
,
0
,
2
,
4
,
2
,
2
)
.
putAll
(
"BI"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"BJ"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"BD"
,
2
,
1
,
3
,
3
,
2
,
2
)
.
putAll
(
"BE"
,
0
,
0
,
3
,
3
,
2
,
2
)
.
putAll
(
"BF"
,
4
,
3
,
4
,
3
,
2
,
2
)
.
putAll
(
"BG"
,
0
,
0
,
0
,
0
,
1
,
2
)
.
putAll
(
"BH"
,
1
,
2
,
2
,
4
,
4
,
2
)
.
putAll
(
"BI"
,
4
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"BJ"
,
4
,
4
,
3
,
4
,
2
,
2
)
.
putAll
(
"BL"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"BM"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"BN"
,
3
,
2
,
1
,
0
,
2
,
2
)
.
putAll
(
"BO"
,
1
,
2
,
4
,
2
,
2
,
2
)
.
putAll
(
"BQ"
,
1
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"BR"
,
2
,
4
,
3
,
2
,
2
,
2
)
.
putAll
(
"BS"
,
2
,
2
,
1
,
3
,
2
,
2
)
.
putAll
(
"BT"
,
3
,
0
,
3
,
2
,
2
,
2
)
.
putAll
(
"BW"
,
3
,
4
,
1
,
1
,
2
,
2
)
.
putAll
(
"BY"
,
1
,
1
,
1
,
2
,
2
,
2
)
.
putAll
(
"BZ"
,
2
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"CA"
,
0
,
3
,
1
,
2
,
4
,
2
)
.
putAll
(
"CD"
,
4
,
2
,
2
,
1
,
2
,
2
)
.
putAll
(
"BM"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"BN"
,
3
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"BO"
,
1
,
3
,
3
,
2
,
2
,
2
)
.
putAll
(
"BQ"
,
1
,
2
,
2
,
0
,
2
,
2
)
.
putAll
(
"BR"
,
2
,
3
,
2
,
2
,
2
,
2
)
.
putAll
(
"BS"
,
4
,
2
,
2
,
3
,
2
,
2
)
.
putAll
(
"BT"
,
3
,
1
,
3
,
2
,
2
,
2
)
.
putAll
(
"BW"
,
3
,
4
,
1
,
0
,
2
,
2
)
.
putAll
(
"BY"
,
0
,
1
,
1
,
3
,
2
,
2
)
.
putAll
(
"BZ"
,
2
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"CA"
,
0
,
2
,
1
,
2
,
4
,
1
)
.
putAll
(
"CD"
,
4
,
2
,
3
,
1
,
2
,
2
)
.
putAll
(
"CF"
,
4
,
2
,
3
,
2
,
2
,
2
)
.
putAll
(
"CG"
,
3
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"CH"
,
0
,
0
,
0
,
0
,
1
,
2
)
.
putAll
(
"CI"
,
3
,
3
,
3
,
3
,
2
,
2
)
.
putAll
(
"CK"
,
2
,
2
,
3
,
0
,
2
,
2
)
.
putAll
(
"CL"
,
1
,
1
,
2
,
2
,
2
,
2
)
.
putAll
(
"CG"
,
2
,
4
,
3
,
4
,
2
,
2
)
.
putAll
(
"CH"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"CI"
,
3
,
3
,
3
,
4
,
2
,
2
)
.
putAll
(
"CK"
,
2
,
2
,
2
,
1
,
2
,
2
)
.
putAll
(
"CL"
,
1
,
1
,
2
,
2
,
3
,
2
)
.
putAll
(
"CM"
,
3
,
4
,
3
,
2
,
2
,
2
)
.
putAll
(
"CN"
,
2
,
2
,
2
,
1
,
3
,
2
)
.
putAll
(
"CO"
,
2
,
3
,
4
,
2
,
2
,
2
)
.
putAll
(
"CR"
,
2
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"CU"
,
4
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"CN"
,
2
,
0
,
2
,
2
,
3
,
1
)
.
putAll
(
"CO"
,
2
,
2
,
4
,
2
,
2
,
2
)
.
putAll
(
"CR"
,
2
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"CU"
,
4
,
4
,
3
,
2
,
2
,
2
)
.
putAll
(
"CV"
,
2
,
3
,
1
,
0
,
2
,
2
)
.
putAll
(
"CW"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"CY"
,
1
,
1
,
0
,
0
,
2
,
2
)
.
putAll
(
"CZ"
,
0
,
1
,
0
,
0
,
1
,
2
)
.
putAll
(
"DE"
,
0
,
0
,
1
,
1
,
0
,
2
)
.
putAll
(
"DJ"
,
4
,
0
,
4
,
4
,
2
,
2
)
.
putAll
(
"CW"
,
2
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"CX"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"CY"
,
1
,
0
,
0
,
0
,
1
,
2
)
.
putAll
(
"CZ"
,
0
,
0
,
0
,
0
,
1
,
2
)
.
putAll
(
"DE"
,
0
,
0
,
2
,
2
,
1
,
2
)
.
putAll
(
"DJ"
,
4
,
1
,
4
,
4
,
2
,
2
)
.
putAll
(
"DK"
,
0
,
0
,
1
,
0
,
0
,
2
)
.
putAll
(
"DM"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"DO"
,
3
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"DZ"
,
3
,
3
,
4
,
4
,
2
,
4
)
.
putAll
(
"EC"
,
2
,
4
,
3
,
1
,
2
,
2
)
.
putAll
(
"EE"
,
0
,
1
,
0
,
0
,
2
,
2
)
.
putAll
(
"EG"
,
3
,
4
,
3
,
3
,
2
,
2
)
.
putAll
(
"DZ"
,
4
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"EC"
,
2
,
4
,
2
,
1
,
2
,
2
)
.
putAll
(
"EE"
,
0
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"EG"
,
3
,
4
,
2
,
3
,
2
,
2
)
.
putAll
(
"EH"
,
2
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"ER"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"ES"
,
0
,
1
,
1
,
1
,
2
,
2
)
.
putAll
(
"ET"
,
4
,
4
,
4
,
1
,
2
,
2
)
.
putAll
(
"FI"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"FJ"
,
3
,
0
,
2
,
3
,
2
,
2
)
.
putAll
(
"FK"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"FM"
,
3
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"FO"
,
1
,
2
,
0
,
1
,
2
,
2
)
.
putAll
(
"FR"
,
1
,
1
,
2
,
0
,
1
,
2
)
.
putAll
(
"GA"
,
3
,
4
,
1
,
1
,
2
,
2
)
.
putAll
(
"GB"
,
0
,
0
,
1
,
1
,
1
,
2
)
.
putAll
(
"ET"
,
4
,
4
,
3
,
1
,
2
,
2
)
.
putAll
(
"FI"
,
0
,
0
,
0
,
1
,
0
,
2
)
.
putAll
(
"FJ"
,
3
,
1
,
3
,
3
,
2
,
2
)
.
putAll
(
"FK"
,
3
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"FM"
,
3
,
2
,
4
,
2
,
2
,
2
)
.
putAll
(
"FO"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"FR"
,
1
,
1
,
2
,
1
,
1
,
1
)
.
putAll
(
"GA"
,
2
,
3
,
1
,
1
,
2
,
2
)
.
putAll
(
"GB"
,
0
,
0
,
1
,
1
,
2
,
3
)
.
putAll
(
"GD"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"GE"
,
1
,
1
,
1
,
2
,
2
,
2
)
.
putAll
(
"GF"
,
2
,
2
,
2
,
3
,
2
,
2
)
.
putAll
(
"GG"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"GH"
,
3
,
1
,
3
,
2
,
2
,
2
)
.
putAll
(
"GI"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"GE"
,
1
,
1
,
1
,
3
,
2
,
2
)
.
putAll
(
"GF"
,
2
,
1
,
2
,
3
,
2
,
2
)
.
putAll
(
"GG"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"GH"
,
3
,
2
,
3
,
2
,
2
,
2
)
.
putAll
(
"GI"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"GL"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"GM"
,
4
,
3
,
2
,
4
,
2
,
2
)
.
putAll
(
"GM"
,
4
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"GN"
,
4
,
3
,
4
,
2
,
2
,
2
)
.
putAll
(
"GP"
,
2
,
1
,
2
,
3
,
2
,
2
)
.
putAll
(
"GQ"
,
4
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"GR"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"GT"
,
3
,
2
,
3
,
1
,
2
,
2
)
.
putAll
(
"GU"
,
1
,
2
,
3
,
4
,
2
,
2
)
.
putAll
(
"GW"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"GY"
,
3
,
3
,
3
,
4
,
2
,
2
)
.
putAll
(
"GQ"
,
4
,
2
,
3
,
4
,
2
,
2
)
.
putAll
(
"GR"
,
1
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"GT"
,
2
,
3
,
2
,
1
,
2
,
2
)
.
putAll
(
"GU"
,
1
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"GW"
,
3
,
4
,
3
,
3
,
2
,
2
)
.
putAll
(
"GY"
,
3
,
4
,
1
,
0
,
2
,
2
)
.
putAll
(
"HK"
,
0
,
1
,
2
,
3
,
2
,
0
)
.
putAll
(
"HN"
,
3
,
1
,
3
,
3
,
2
,
2
)
.
putAll
(
"HR"
,
1
,
1
,
0
,
0
,
3
,
2
)
.
putAll
(
"HN"
,
3
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"HR"
,
1
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"HT"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"HU"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"ID"
,
3
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"IE"
,
0
,
0
,
1
,
1
,
3
,
2
)
.
putAll
(
"IL"
,
1
,
0
,
2
,
3
,
4
,
2
)
.
putAll
(
"HU"
,
0
,
0
,
0
,
1
,
3
,
2
)
.
putAll
(
"ID"
,
3
,
2
,
3
,
3
,
3
,
2
)
.
putAll
(
"IE"
,
0
,
1
,
1
,
1
,
2
,
2
)
.
putAll
(
"IL"
,
1
,
1
,
2
,
3
,
4
,
2
)
.
putAll
(
"IM"
,
0
,
2
,
0
,
1
,
2
,
2
)
.
putAll
(
"IN"
,
2
,
1
,
3
,
3
,
2
,
2
)
.
putAll
(
"IO"
,
4
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"IQ"
,
3
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"IR"
,
3
,
2
,
3
,
2
,
2
,
2
)
.
putAll
(
"IS"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"IT"
,
0
,
4
,
0
,
1
,
2
,
2
)
.
putAll
(
"JE"
,
2
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"JM"
,
3
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"JO"
,
2
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"JP"
,
0
,
0
,
0
,
0
,
2
,
1
)
.
putAll
(
"KE"
,
3
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"KG"
,
2
,
0
,
1
,
1
,
2
,
2
)
.
putAll
(
"KH"
,
1
,
0
,
4
,
3
,
2
,
2
)
.
putAll
(
"IN"
,
1
,
1
,
3
,
2
,
4
,
3
)
.
putAll
(
"IO"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"IQ"
,
3
,
3
,
3
,
3
,
2
,
2
)
.
putAll
(
"IR"
,
3
,
0
,
1
,
1
,
3
,
0
)
.
putAll
(
"IS"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"IT"
,
0
,
1
,
0
,
1
,
1
,
2
)
.
putAll
(
"JE"
,
3
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"JM"
,
3
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"JO"
,
1
,
0
,
0
,
1
,
2
,
2
)
.
putAll
(
"JP"
,
0
,
1
,
0
,
1
,
1
,
1
)
.
putAll
(
"KE"
,
3
,
3
,
2
,
2
,
2
,
2
)
.
putAll
(
"KG"
,
2
,
1
,
1
,
1
,
2
,
2
)
.
putAll
(
"KH"
,
1
,
1
,
4
,
2
,
2
,
2
)
.
putAll
(
"KI"
,
4
,
2
,
4
,
3
,
2
,
2
)
.
putAll
(
"KM"
,
4
,
3
,
2
,
3
,
2
,
2
)
.
putAll
(
"KN"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"KP"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"KR"
,
0
,
0
,
1
,
3
,
1
,
2
)
.
putAll
(
"KW"
,
1
,
3
,
1
,
1
,
1
,
2
)
.
putAll
(
"KY"
,
1
,
2
,
0
,
2
,
2
,
2
)
.
putAll
(
"KZ"
,
2
,
2
,
2
,
3
,
2
,
2
)
.
putAll
(
"LA"
,
1
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"LB"
,
3
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"KM"
,
4
,
2
,
4
,
3
,
2
,
2
)
.
putAll
(
"KN"
,
2
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"KP"
,
3
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"KR"
,
0
,
0
,
1
,
3
,
4
,
4
)
.
putAll
(
"KW"
,
1
,
1
,
0
,
0
,
0
,
2
)
.
putAll
(
"KY"
,
1
,
2
,
0
,
1
,
2
,
2
)
.
putAll
(
"KZ"
,
1
,
1
,
2
,
2
,
2
,
2
)
.
putAll
(
"LA"
,
2
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"LB"
,
3
,
2
,
1
,
4
,
2
,
2
)
.
putAll
(
"LC"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"LI"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"LK"
,
2
,
0
,
2
,
3
,
2
,
2
)
.
putAll
(
"LK"
,
3
,
1
,
3
,
4
,
4
,
2
)
.
putAll
(
"LR"
,
3
,
4
,
4
,
3
,
2
,
2
)
.
putAll
(
"LS"
,
3
,
3
,
2
,
3
,
2
,
2
)
.
putAll
(
"LS"
,
3
,
3
,
4
,
3
,
2
,
2
)
.
putAll
(
"LT"
,
0
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"LU"
,
1
,
0
,
1
,
1
,
2
,
2
)
.
putAll
(
"LU"
,
1
,
0
,
2
,
2
,
2
,
2
)
.
putAll
(
"LV"
,
0
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"LY"
,
4
,
2
,
4
,
3
,
2
,
2
)
.
putAll
(
"MA"
,
3
,
2
,
2
,
1
,
2
,
2
)
.
putAll
(
"MC"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"MD"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"ME"
,
1
,
2
,
0
,
1
,
2
,
2
)
.
putAll
(
"MF"
,
2
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"MA"
,
3
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"MC"
,
0
,
2
,
2
,
0
,
2
,
2
)
.
putAll
(
"MD"
,
1
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"ME"
,
1
,
0
,
0
,
1
,
2
,
2
)
.
putAll
(
"MF"
,
1
,
2
,
1
,
0
,
2
,
2
)
.
putAll
(
"MG"
,
3
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"MH"
,
4
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"MK"
,
1
,
1
,
0
,
0
,
2
,
2
)
.
putAll
(
"ML"
,
4
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"MM"
,
2
,
3
,
3
,
3
,
2
,
2
)
.
putAll
(
"MN"
,
2
,
4
,
2
,
2
,
2
,
2
)
.
putAll
(
"MH"
,
3
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"MK"
,
1
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"ML"
,
4
,
3
,
3
,
1
,
2
,
2
)
.
putAll
(
"MM"
,
2
,
4
,
3
,
3
,
2
,
2
)
.
putAll
(
"MN"
,
2
,
0
,
1
,
2
,
2
,
2
)
.
putAll
(
"MO"
,
0
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"MP"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"MQ"
,
2
,
2
,
2
,
3
,
2
,
2
)
.
putAll
(
"MR"
,
3
,
0
,
4
,
3
,
2
,
2
)
.
putAll
(
"MQ"
,
2
,
1
,
2
,
3
,
2
,
2
)
.
putAll
(
"MR"
,
4
,
1
,
3
,
4
,
2
,
2
)
.
putAll
(
"MS"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"MT"
,
0
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"MU"
,
2
,
1
,
1
,
2
,
2
,
2
)
.
putAll
(
"MV"
,
4
,
3
,
2
,
4
,
2
,
2
)
.
putAll
(
"MT"
,
0
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"MU"
,
3
,
1
,
1
,
2
,
2
,
2
)
.
putAll
(
"MV"
,
3
,
4
,
1
,
4
,
2
,
2
)
.
putAll
(
"MW"
,
4
,
2
,
1
,
0
,
2
,
2
)
.
putAll
(
"MX"
,
2
,
4
,
4
,
4
,
4
,
2
)
.
putAll
(
"MY"
,
1
,
0
,
3
,
2
,
2
,
2
)
.
putAll
(
"MZ"
,
3
,
3
,
2
,
1
,
2
,
2
)
.
putAll
(
"NA"
,
4
,
3
,
3
,
2
,
2
,
2
)
.
putAll
(
"NC"
,
3
,
0
,
4
,
4
,
2
,
2
)
.
putAll
(
"MX"
,
2
,
4
,
3
,
4
,
2
,
2
)
.
putAll
(
"MY"
,
2
,
1
,
3
,
3
,
2
,
2
)
.
putAll
(
"MZ"
,
3
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"NA"
,
4
,
3
,
2
,
2
,
2
,
2
)
.
putAll
(
"NC"
,
3
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"NE"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"NF"
,
2
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"NG"
,
3
,
3
,
2
,
3
,
2
,
2
)
.
putAll
(
"NI"
,
2
,
1
,
4
,
4
,
2
,
2
)
.
putAll
(
"NL"
,
0
,
2
,
3
,
2
,
0
,
2
)
.
putAll
(
"NO"
,
0
,
1
,
2
,
0
,
0
,
2
)
.
putAll
(
"NP"
,
2
,
0
,
4
,
2
,
2
,
2
)
.
putAll
(
"NR"
,
3
,
2
,
3
,
1
,
2
,
2
)
.
putAll
(
"NG"
,
3
,
4
,
1
,
1
,
2
,
2
)
.
putAll
(
"NI"
,
2
,
3
,
4
,
3
,
2
,
2
)
.
putAll
(
"NL"
,
0
,
0
,
3
,
2
,
0
,
4
)
.
putAll
(
"NO"
,
0
,
0
,
2
,
0
,
0
,
2
)
.
putAll
(
"NP"
,
2
,
1
,
4
,
3
,
2
,
2
)
.
putAll
(
"NR"
,
3
,
2
,
2
,
0
,
2
,
2
)
.
putAll
(
"NU"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"NZ"
,
0
,
2
,
1
,
2
,
4
,
2
)
.
putAll
(
"OM"
,
2
,
2
,
1
,
3
,
3
,
2
)
.
putAll
(
"NZ"
,
1
,
0
,
1
,
2
,
4
,
2
)
.
putAll
(
"OM"
,
2
,
3
,
1
,
3
,
4
,
2
)
.
putAll
(
"PA"
,
1
,
3
,
3
,
3
,
2
,
2
)
.
putAll
(
"PE"
,
2
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"PF"
,
2
,
2
,
2
,
1
,
2
,
2
)
.
putAll
(
"PE"
,
2
,
3
,
4
,
4
,
4
,
2
)
.
putAll
(
"PF"
,
2
,
3
,
3
,
1
,
2
,
2
)
.
putAll
(
"PG"
,
4
,
4
,
3
,
2
,
2
,
2
)
.
putAll
(
"PH"
,
2
,
1
,
3
,
3
,
3
,
2
)
.
putAll
(
"PH"
,
2
,
2
,
3
,
3
,
3
,
2
)
.
putAll
(
"PK"
,
3
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"PL"
,
1
,
0
,
1
,
2
,
3
,
2
)
.
putAll
(
"PL"
,
1
,
1
,
2
,
2
,
3
,
2
)
.
putAll
(
"PM"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"PR"
,
2
,
1
,
2
,
2
,
4
,
3
)
.
putAll
(
"PS"
,
3
,
3
,
2
,
2
,
2
,
2
)
.
putAll
(
"PT"
,
0
,
1
,
1
,
0
,
2
,
2
)
.
putAll
(
"PW"
,
1
,
2
,
4
,
1
,
2
,
2
)
.
putAll
(
"PY"
,
2
,
0
,
3
,
2
,
2
,
2
)
.
putAll
(
"QA"
,
2
,
3
,
1
,
2
,
3
,
2
)
.
putAll
(
"RE"
,
1
,
0
,
2
,
2
,
2
,
2
)
.
putAll
(
"RO"
,
0
,
1
,
0
,
1
,
0
,
2
)
.
putAll
(
"RS"
,
1
,
2
,
0
,
0
,
2
,
2
)
.
putAll
(
"RU"
,
0
,
1
,
0
,
1
,
4
,
2
)
.
putAll
(
"RW"
,
3
,
3
,
3
,
1
,
2
,
2
)
.
putAll
(
"SA"
,
2
,
2
,
2
,
1
,
1
,
2
)
.
putAll
(
"SB"
,
4
,
2
,
3
,
2
,
2
,
2
)
.
putAll
(
"SC"
,
4
,
2
,
1
,
3
,
2
,
2
)
.
putAll
(
"PR"
,
2
,
3
,
2
,
2
,
3
,
3
)
.
putAll
(
"PS"
,
3
,
4
,
1
,
2
,
2
,
2
)
.
putAll
(
"PT"
,
0
,
1
,
0
,
0
,
2
,
2
)
.
putAll
(
"PW"
,
2
,
2
,
4
,
1
,
2
,
2
)
.
putAll
(
"PY"
,
2
,
2
,
3
,
2
,
2
,
2
)
.
putAll
(
"QA"
,
2
,
4
,
2
,
4
,
4
,
2
)
.
putAll
(
"RE"
,
1
,
1
,
1
,
2
,
2
,
2
)
.
putAll
(
"RO"
,
0
,
0
,
1
,
1
,
1
,
2
)
.
putAll
(
"RS"
,
1
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"RU"
,
0
,
0
,
0
,
1
,
2
,
2
)
.
putAll
(
"RW"
,
3
,
4
,
3
,
0
,
2
,
2
)
.
putAll
(
"SA"
,
2
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"SB"
,
4
,
2
,
4
,
3
,
2
,
2
)
.
putAll
(
"SC"
,
4
,
3
,
0
,
2
,
2
,
2
)
.
putAll
(
"SD"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"SE"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"SG"
,
1
,
0
,
1
,
2
,
3
,
2
)
.
putAll
(
"SG"
,
1
,
1
,
2
,
3
,
1
,
4
)
.
putAll
(
"SH"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"SI"
,
0
,
0
,
0
,
0
,
2
,
2
)
.
putAll
(
"SJ"
,
2
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"SK"
,
0
,
1
,
0
,
0
,
2
,
2
)
.
putAll
(
"SL"
,
4
,
3
,
4
,
0
,
2
,
2
)
.
putAll
(
"SI"
,
0
,
0
,
0
,
0
,
1
,
2
)
.
putAll
(
"SJ"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"SK"
,
0
,
0
,
0
,
0
,
0
,
2
)
.
putAll
(
"SL"
,
4
,
3
,
4
,
1
,
2
,
2
)
.
putAll
(
"SM"
,
0
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"SN"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"SO"
,
3
,
3
,
3
,
4
,
2
,
2
)
.
putAll
(
"SR"
,
3
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"SS"
,
4
,
4
,
3
,
3
,
2
,
2
)
.
putAll
(
"ST"
,
2
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"SV"
,
2
,
1
,
4
,
3
,
2
,
2
)
.
putAll
(
"SO"
,
3
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"SR"
,
2
,
3
,
2
,
2
,
2
,
2
)
.
putAll
(
"SS"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"ST"
,
3
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"SV"
,
2
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"SX"
,
2
,
2
,
1
,
0
,
2
,
2
)
.
putAll
(
"SY"
,
4
,
3
,
3
,
2
,
2
,
2
)
.
putAll
(
"SZ"
,
3
,
3
,
2
,
4
,
2
,
2
)
.
putAll
(
"TC"
,
2
,
2
,
2
,
0
,
2
,
2
)
.
putAll
(
"TD"
,
4
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"TG"
,
3
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"TH"
,
0
,
3
,
2
,
3
,
2
,
2
)
.
putAll
(
"TJ"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"TL"
,
4
,
0
,
4
,
4
,
2
,
2
)
.
putAll
(
"TM"
,
4
,
2
,
4
,
3
,
2
,
2
)
.
putAll
(
"TN"
,
2
,
1
,
1
,
2
,
2
,
2
)
.
putAll
(
"TO"
,
3
,
3
,
4
,
3
,
2
,
2
)
.
putAll
(
"TR"
,
1
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"TT"
,
1
,
4
,
0
,
1
,
2
,
2
)
.
putAll
(
"TV"
,
3
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"TW"
,
0
,
0
,
0
,
0
,
1
,
0
)
.
putAll
(
"TZ"
,
3
,
3
,
3
,
2
,
2
,
2
)
.
putAll
(
"SY"
,
4
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"SZ"
,
4
,
3
,
2
,
4
,
2
,
2
)
.
putAll
(
"TC"
,
2
,
2
,
1
,
0
,
2
,
2
)
.
putAll
(
"TD"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"TG"
,
3
,
3
,
2
,
0
,
2
,
2
)
.
putAll
(
"TH"
,
0
,
3
,
2
,
3
,
3
,
0
)
.
putAll
(
"TJ"
,
4
,
2
,
4
,
4
,
2
,
2
)
.
putAll
(
"TL"
,
4
,
3
,
4
,
4
,
2
,
2
)
.
putAll
(
"TM"
,
4
,
2
,
4
,
2
,
2
,
2
)
.
putAll
(
"TN"
,
2
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"TO"
,
4
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"TR"
,
1
,
1
,
0
,
1
,
2
,
2
)
.
putAll
(
"TT"
,
1
,
4
,
1
,
1
,
2
,
2
)
.
putAll
(
"TV"
,
4
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"TW"
,
0
,
0
,
0
,
0
,
0
,
0
)
.
putAll
(
"TZ"
,
3
,
4
,
3
,
3
,
2
,
2
)
.
putAll
(
"UA"
,
0
,
3
,
1
,
1
,
2
,
2
)
.
putAll
(
"UG"
,
3
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"US"
,
1
,
1
,
2
,
2
,
4
,
2
)
.
putAll
(
"UY"
,
2
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"UZ"
,
2
,
1
,
3
,
4
,
2
,
2
)
.
putAll
(
"UG"
,
3
,
3
,
3
,
3
,
2
,
2
)
.
putAll
(
"US"
,
1
,
1
,
2
,
2
,
3
,
2
)
.
putAll
(
"UY"
,
2
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"UZ"
,
2
,
2
,
3
,
4
,
2
,
2
)
.
putAll
(
"VC"
,
1
,
2
,
2
,
2
,
2
,
2
)
.
putAll
(
"VE"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"VG"
,
2
,
2
,
1
,
1
,
2
,
2
)
.
putAll
(
"VI"
,
1
,
2
,
1
,
2
,
2
,
2
)
.
putAll
(
"VN"
,
0
,
1
,
3
,
4
,
2
,
2
)
.
putAll
(
"VU"
,
4
,
0
,
3
,
1
,
2
,
2
)
.
putAll
(
"VI"
,
1
,
2
,
1
,
3
,
2
,
2
)
.
putAll
(
"VN"
,
0
,
3
,
3
,
4
,
2
,
2
)
.
putAll
(
"VU"
,
4
,
2
,
2
,
1
,
2
,
2
)
.
putAll
(
"WF"
,
4
,
2
,
2
,
4
,
2
,
2
)
.
putAll
(
"WS"
,
3
,
1
,
3
,
1
,
2
,
2
)
.
putAll
(
"XK"
,
0
,
1
,
1
,
0
,
2
,
2
)
.
putAll
(
"YE"
,
4
,
4
,
4
,
3
,
2
,
2
)
.
putAll
(
"YT"
,
4
,
2
,
2
,
3
,
2
,
2
)
.
putAll
(
"ZA"
,
3
,
3
,
2
,
1
,
2
,
2
)
.
putAll
(
"ZM"
,
3
,
2
,
3
,
3
,
2
,
2
)
.
putAll
(
"WS"
,
3
,
1
,
2
,
1
,
2
,
2
)
.
putAll
(
"XK"
,
1
,
1
,
1
,
1
,
2
,
2
)
.
putAll
(
"YE"
,
4
,
4
,
4
,
4
,
2
,
2
)
.
putAll
(
"YT"
,
4
,
1
,
1
,
1
,
2
,
2
)
.
putAll
(
"ZA"
,
3
,
3
,
1
,
1
,
1
,
2
)
.
putAll
(
"ZM"
,
3
,
3
,
4
,
2
,
2
,
2
)
.
putAll
(
"ZW"
,
3
,
2
,
4
,
3
,
2
,
2
)
.
build
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment