Merge branch '3.4' into 4.4
* 3.4: [Validator] Add missing translations of nn locale [HttpKernel] Fix that the `Store` would not save responses with the X-Content-Digest header present [Intl] bump icu 67.1
This commit is contained in:
commit
2c57ae2b97
@ -175,19 +175,15 @@ class Store implements StoreInterface
|
|||||||
$key = $this->getCacheKey($request);
|
$key = $this->getCacheKey($request);
|
||||||
$storedEnv = $this->persistRequest($request);
|
$storedEnv = $this->persistRequest($request);
|
||||||
|
|
||||||
// write the response body to the entity store if this is the original response
|
$digest = $this->generateContentDigest($response);
|
||||||
if (!$response->headers->has('X-Content-Digest')) {
|
$response->headers->set('X-Content-Digest', $digest);
|
||||||
$digest = $this->generateContentDigest($response);
|
|
||||||
|
|
||||||
if (!$this->save($digest, $response->getContent())) {
|
if (!$this->save($digest, $response->getContent(), false)) {
|
||||||
throw new \RuntimeException('Unable to store the entity.');
|
throw new \RuntimeException('Unable to store the entity.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$response->headers->set('X-Content-Digest', $digest);
|
if (!$response->headers->has('Transfer-Encoding')) {
|
||||||
|
$response->headers->set('Content-Length', \strlen($response->getContent()));
|
||||||
if (!$response->headers->has('Transfer-Encoding')) {
|
|
||||||
$response->headers->set('Content-Length', \strlen($response->getContent()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// read existing cache entries, remove non-varying, and add this one to the list
|
// read existing cache entries, remove non-varying, and add this one to the list
|
||||||
@ -346,10 +342,14 @@ class Store implements StoreInterface
|
|||||||
/**
|
/**
|
||||||
* Save data for the given key.
|
* Save data for the given key.
|
||||||
*/
|
*/
|
||||||
private function save(string $key, string $data): bool
|
private function save(string $key, string $data, bool $overwrite = true): bool
|
||||||
{
|
{
|
||||||
$path = $this->getPath($key);
|
$path = $this->getPath($key);
|
||||||
|
|
||||||
|
if (!$overwrite && file_exists($path)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($this->locks[$key])) {
|
if (isset($this->locks[$key])) {
|
||||||
$fp = $this->locks[$key];
|
$fp = $this->locks[$key];
|
||||||
@ftruncate($fp, 0);
|
@ftruncate($fp, 0);
|
||||||
|
@ -97,6 +97,27 @@ class StoreTest extends TestCase
|
|||||||
$this->assertEquals('en9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', $res['x-content-digest'][0]);
|
$this->assertEquals('en9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', $res['x-content-digest'][0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDoesNotTrustXContentDigestFromUpstream()
|
||||||
|
{
|
||||||
|
$response = new Response('test', 200, ['X-Content-Digest' => 'untrusted-from-elsewhere']);
|
||||||
|
|
||||||
|
$cacheKey = $this->store->write($this->request, $response);
|
||||||
|
$entries = $this->getStoreMetadata($cacheKey);
|
||||||
|
list(, $res) = $entries[0];
|
||||||
|
|
||||||
|
$this->assertEquals('en9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', $res['x-content-digest'][0]);
|
||||||
|
$this->assertEquals('en9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', $response->headers->get('X-Content-Digest'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWritesResponseEvenIfXContentDigestIsPresent()
|
||||||
|
{
|
||||||
|
// Prime the store
|
||||||
|
$this->store->write($this->request, new Response('test', 200, ['X-Content-Digest' => 'untrusted-from-elsewhere']));
|
||||||
|
|
||||||
|
$response = $this->store->lookup($this->request);
|
||||||
|
$this->assertNotNull($response);
|
||||||
|
}
|
||||||
|
|
||||||
public function testFindsAStoredEntryWithLookup()
|
public function testFindsAStoredEntryWithLookup()
|
||||||
{
|
{
|
||||||
$this->storeSimpleEntry();
|
$this->storeSimpleEntry();
|
||||||
|
@ -82,7 +82,6 @@ class CurrencyDataGenerator extends AbstractDataGenerator
|
|||||||
|
|
||||||
if (isset($localeBundle['Currencies']) && null !== $localeBundle['Currencies']) {
|
if (isset($localeBundle['Currencies']) && null !== $localeBundle['Currencies']) {
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $localeBundle['Version'],
|
|
||||||
'Names' => $this->generateSymbolNamePairs($localeBundle),
|
'Names' => $this->generateSymbolNamePairs($localeBundle),
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -102,7 +101,6 @@ class CurrencyDataGenerator extends AbstractDataGenerator
|
|||||||
$rootBundle = $reader->read($tempDir, 'root');
|
$rootBundle = $reader->read($tempDir, 'root');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Names' => $this->generateSymbolNamePairs($rootBundle),
|
'Names' => $this->generateSymbolNamePairs($rootBundle),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -112,7 +110,6 @@ class CurrencyDataGenerator extends AbstractDataGenerator
|
|||||||
*/
|
*/
|
||||||
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
||||||
{
|
{
|
||||||
$rootBundle = $reader->read($tempDir, 'root');
|
|
||||||
$supplementalDataBundle = $reader->read($tempDir, 'supplementalData');
|
$supplementalDataBundle = $reader->read($tempDir, 'supplementalData');
|
||||||
$numericCodesBundle = $reader->read($tempDir, 'currencyNumericCodes');
|
$numericCodesBundle = $reader->read($tempDir, 'currencyNumericCodes');
|
||||||
|
|
||||||
@ -121,7 +118,6 @@ class CurrencyDataGenerator extends AbstractDataGenerator
|
|||||||
sort($this->currencyCodes);
|
sort($this->currencyCodes);
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Currencies' => $this->currencyCodes,
|
'Currencies' => $this->currencyCodes,
|
||||||
'Meta' => $this->generateCurrencyMeta($supplementalDataBundle),
|
'Meta' => $this->generateCurrencyMeta($supplementalDataBundle),
|
||||||
'Alpha3ToNumeric' => $this->generateAlpha3ToNumericMapping($numericCodesBundle, $this->currencyCodes),
|
'Alpha3ToNumeric' => $this->generateAlpha3ToNumericMapping($numericCodesBundle, $this->currencyCodes),
|
||||||
|
@ -143,7 +143,6 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $localeBundle['Version'],
|
|
||||||
'Names' => $names,
|
'Names' => $names,
|
||||||
'LocalizedNames' => $localizedNames,
|
'LocalizedNames' => $localizedNames,
|
||||||
];
|
];
|
||||||
@ -167,7 +166,6 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
|||||||
*/
|
*/
|
||||||
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
||||||
{
|
{
|
||||||
$rootBundle = $reader->read($tempDir, 'root');
|
|
||||||
$metadataBundle = $reader->read($tempDir, 'metadata');
|
$metadataBundle = $reader->read($tempDir, 'metadata');
|
||||||
|
|
||||||
$this->languageCodes = array_unique($this->languageCodes);
|
$this->languageCodes = array_unique($this->languageCodes);
|
||||||
@ -175,7 +173,6 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
|||||||
sort($this->languageCodes);
|
sort($this->languageCodes);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Languages' => $this->languageCodes,
|
'Languages' => $this->languageCodes,
|
||||||
'Alpha3Languages' => $this->generateAlpha3Codes($this->languageCodes, $metadataBundle),
|
'Alpha3Languages' => $this->generateAlpha3Codes($this->languageCodes, $metadataBundle),
|
||||||
'Alpha2ToAlpha3' => $this->generateAlpha2ToAlpha3Mapping($metadataBundle),
|
'Alpha2ToAlpha3' => $this->generateAlpha2ToAlpha3Mapping($metadataBundle),
|
||||||
|
@ -116,7 +116,6 @@ class RegionDataGenerator extends AbstractDataGenerator
|
|||||||
// isset() on \ResourceBundle returns true even if the value is null
|
// isset() on \ResourceBundle returns true even if the value is null
|
||||||
if (isset($localeBundle['Countries']) && null !== $localeBundle['Countries']) {
|
if (isset($localeBundle['Countries']) && null !== $localeBundle['Countries']) {
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $localeBundle['Version'],
|
|
||||||
'Names' => $this->generateRegionNames($localeBundle),
|
'Names' => $this->generateRegionNames($localeBundle),
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -141,7 +140,6 @@ class RegionDataGenerator extends AbstractDataGenerator
|
|||||||
*/
|
*/
|
||||||
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
||||||
{
|
{
|
||||||
$rootBundle = $reader->read($tempDir, 'root');
|
|
||||||
$metadataBundle = $reader->read($tempDir, 'metadata');
|
$metadataBundle = $reader->read($tempDir, 'metadata');
|
||||||
|
|
||||||
$this->regionCodes = array_unique($this->regionCodes);
|
$this->regionCodes = array_unique($this->regionCodes);
|
||||||
@ -153,7 +151,6 @@ class RegionDataGenerator extends AbstractDataGenerator
|
|||||||
asort($alpha3ToAlpha2);
|
asort($alpha3ToAlpha2);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Regions' => $this->regionCodes,
|
'Regions' => $this->regionCodes,
|
||||||
'Alpha2ToAlpha3' => $alpha2ToAlpha3,
|
'Alpha2ToAlpha3' => $alpha2ToAlpha3,
|
||||||
'Alpha3ToAlpha2' => $alpha3ToAlpha2,
|
'Alpha3ToAlpha2' => $alpha3ToAlpha2,
|
||||||
|
@ -69,7 +69,6 @@ class ScriptDataGenerator extends AbstractDataGenerator
|
|||||||
// isset() on \ResourceBundle returns true even if the value is null
|
// isset() on \ResourceBundle returns true even if the value is null
|
||||||
if (isset($localeBundle['Scripts']) && null !== $localeBundle['Scripts']) {
|
if (isset($localeBundle['Scripts']) && null !== $localeBundle['Scripts']) {
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $localeBundle['Version'],
|
|
||||||
'Names' => array_diff_key(iterator_to_array($localeBundle['Scripts']), self::$blacklist),
|
'Names' => array_diff_key(iterator_to_array($localeBundle['Scripts']), self::$blacklist),
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -94,14 +93,11 @@ class ScriptDataGenerator extends AbstractDataGenerator
|
|||||||
*/
|
*/
|
||||||
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
protected function generateDataForMeta(BundleEntryReaderInterface $reader, string $tempDir): ?array
|
||||||
{
|
{
|
||||||
$rootBundle = $reader->read($tempDir, 'root');
|
|
||||||
|
|
||||||
$this->scriptCodes = array_unique($this->scriptCodes);
|
$this->scriptCodes = array_unique($this->scriptCodes);
|
||||||
|
|
||||||
sort($this->scriptCodes);
|
sort($this->scriptCodes);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Scripts' => $this->scriptCodes,
|
'Scripts' => $this->scriptCodes,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,6 @@ class TimezoneDataGenerator extends AbstractDataGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $localeBundle['Version'],
|
|
||||||
'Names' => $this->generateZones($reader, $tempDir, $displayLocale),
|
'Names' => $this->generateZones($reader, $tempDir, $displayLocale),
|
||||||
'Meta' => self::generateZoneMetadata($localeBundle),
|
'Meta' => self::generateZoneMetadata($localeBundle),
|
||||||
];
|
];
|
||||||
@ -131,7 +130,6 @@ class TimezoneDataGenerator extends AbstractDataGenerator
|
|||||||
$rootBundle = $reader->read($tempDir, 'root');
|
$rootBundle = $reader->read($tempDir, 'root');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Meta' => self::generateZoneMetadata($rootBundle),
|
'Meta' => self::generateZoneMetadata($rootBundle),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -149,7 +147,6 @@ class TimezoneDataGenerator extends AbstractDataGenerator
|
|||||||
ksort($this->zoneToCountryMapping);
|
ksort($this->zoneToCountryMapping);
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'Version' => $rootBundle['Version'],
|
|
||||||
'Zones' => $this->zoneIds,
|
'Zones' => $this->zoneIds,
|
||||||
'ZoneToCountry' => $this->zoneToCountryMapping,
|
'ZoneToCountry' => $this->zoneToCountryMapping,
|
||||||
'CountryToZone' => self::generateCountryToZoneMapping($this->zoneToCountryMapping),
|
'CountryToZone' => self::generateCountryToZoneMapping($this->zoneToCountryMapping),
|
||||||
|
@ -256,7 +256,7 @@ final class Intl
|
|||||||
*/
|
*/
|
||||||
public static function getIcuStubVersion(): string
|
public static function getIcuStubVersion(): string
|
||||||
{
|
{
|
||||||
return '66.1';
|
return '67.1';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"NAD": [
|
"NAD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
@ -239,7 +238,7 @@
|
|||||||
],
|
],
|
||||||
"HRK": [
|
"HRK": [
|
||||||
"HRK",
|
"HRK",
|
||||||
"HRK"
|
"የክሮሽያ ኩና"
|
||||||
],
|
],
|
||||||
"HTG": [
|
"HTG": [
|
||||||
"HTG",
|
"HTG",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"DJF": [
|
"DJF": [
|
||||||
"Fdj",
|
"Fdj",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ERN": [
|
"ERN": [
|
||||||
"Nfk",
|
"Nfk",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"KMF": [
|
"KMF": [
|
||||||
"CF",
|
"CF",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"SDG": [
|
"SDG": [
|
||||||
"SDG",
|
"SDG",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"SOS": [
|
"SOS": [
|
||||||
"S",
|
"S",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GBP": [
|
"GBP": [
|
||||||
"GB£",
|
"GB£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AZN": [
|
"AZN": [
|
||||||
"₼",
|
"₼",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"CNY": [
|
"CNY": [
|
||||||
"¥",
|
"¥",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"CNY": [
|
"CNY": [
|
||||||
"CN¥",
|
"CN¥",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"FRF": [
|
"FRF": [
|
||||||
"F",
|
"F",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BYN": [
|
"BYN": [
|
||||||
"BYN",
|
"BYN",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"EUR": [
|
"EUR": [
|
||||||
"EUR",
|
"EUR",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"LUF": [
|
"LUF": [
|
||||||
"F",
|
"F",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ADP": [
|
"ADP": [
|
||||||
"ADP",
|
"ADP",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BYB": [
|
"BYB": [
|
||||||
"BYB",
|
"BYB",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"EUR": [
|
"EUR": [
|
||||||
"€",
|
"€",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AED": [
|
"AED": [
|
||||||
"AED",
|
"AED",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BBD": [
|
"BBD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BIF": [
|
"BIF": [
|
||||||
"FBu",
|
"FBu",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BMD": [
|
"BMD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BSD": [
|
"BSD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BWP": [
|
"BWP": [
|
||||||
"P",
|
"P",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"BZD": [
|
"BZD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"CAD": [
|
"CAD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AUD": [
|
"AUD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"NZD": [
|
"NZD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AUD": [
|
"AUD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"DKK": [
|
"DKK": [
|
||||||
"kr.",
|
"kr.",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ERN": [
|
"ERN": [
|
||||||
"Nfk",
|
"Nfk",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"FJD": [
|
"FJD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"FKP": [
|
"FKP": [
|
||||||
"£",
|
"£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GBP": [
|
"GBP": [
|
||||||
"£",
|
"£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GHS": [
|
"GHS": [
|
||||||
"GH₵",
|
"GH₵",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GBP": [
|
"GBP": [
|
||||||
"GB£",
|
"GB£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GMD": [
|
"GMD": [
|
||||||
"D",
|
"D",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GYD": [
|
"GYD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GBP": [
|
"GBP": [
|
||||||
"£",
|
"£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"VEF": [
|
"VEF": [
|
||||||
"VEF",
|
"VEF",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GBP": [
|
"GBP": [
|
||||||
"£",
|
"£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"JMD": [
|
"JMD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"KES": [
|
"KES": [
|
||||||
"Ksh",
|
"Ksh",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AUD": [
|
"AUD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"KYD": [
|
"KYD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"LRD": [
|
"LRD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"ZAR": [
|
"ZAR": [
|
||||||
"R",
|
"R",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"MGA": [
|
"MGA": [
|
||||||
"Ar",
|
"Ar",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"MOP": [
|
"MOP": [
|
||||||
"MOP$",
|
"MOP$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"XCD": [
|
"XCD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"GBP": [
|
"GBP": [
|
||||||
"GB£",
|
"GB£",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"MUR": [
|
"MUR": [
|
||||||
"Rs",
|
"Rs",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"MWK": [
|
"MWK": [
|
||||||
"MK",
|
"MK",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"MYR": [
|
"MYR": [
|
||||||
"RM",
|
"RM",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"NAD": [
|
"NAD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AUD": [
|
"AUD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"NGN": [
|
"NGN": [
|
||||||
"₦",
|
"₦",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"VUV": [
|
"VUV": [
|
||||||
"VT",
|
"VT",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"AUD": [
|
"AUD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"NZD": [
|
"NZD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"NZD": [
|
"NZD": [
|
||||||
"$",
|
"$",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"PGK": [
|
"PGK": [
|
||||||
"K",
|
"K",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"PHP": [
|
"PHP": [
|
||||||
"₱",
|
"₱",
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Version": "36.1",
|
|
||||||
"Names": {
|
"Names": {
|
||||||
"PKR": [
|
"PKR": [
|
||||||
"Rs",
|
"Rs",
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user