@openfin/core 39.82.12 → 39.83.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -102,7 +102,7 @@ declare type ApiInjection = DomainApiSettings;
102
102
  * Generated when a new Platform's API becomes responsive.
103
103
  * @interface
104
104
  */
105
- declare type ApiReadyEvent = BaseEvent & {
105
+ declare type ApiReadyEvent = BaseEvents.BaseEvent & {
106
106
  topic: 'application';
107
107
  type: 'platform-api-ready';
108
108
  };
@@ -914,7 +914,7 @@ declare namespace ApplicationEvents {
914
914
  PropagatedApplicationEvent,
915
915
  PropagatedEventType_3 as PropagatedEventType,
916
916
  PropagatedApplicationEventType,
917
- Payload_4 as Payload,
917
+ Payload_5 as Payload,
918
918
  ByType_3 as ByType
919
919
  }
920
920
  }
@@ -1707,7 +1707,7 @@ declare type BaseEvent_10 = Events.BaseEvents.BaseEvent;
1707
1707
  * A base Channel event.
1708
1708
  * @interface
1709
1709
  */
1710
- declare type BaseEvent_2 = NamedEvent & {
1710
+ declare type BaseEvent_2 = BaseEvents.NamedEvent & {
1711
1711
  channelName: string;
1712
1712
  channelId: string;
1713
1713
  };
@@ -1777,6 +1777,7 @@ declare namespace BaseEvents {
1777
1777
  NotCloseRequested,
1778
1778
  PropagatedEventType,
1779
1779
  PropagatedEvent,
1780
+ Payload_2 as Payload,
1780
1781
  EventHandler,
1781
1782
  BaseEvent,
1782
1783
  IdentityEvent,
@@ -1917,7 +1918,7 @@ declare type BrowserContentCreationRule = BaseContentCreationRule & {
1917
1918
  *
1918
1919
  * @typeParam Type String key specifying the event to extract
1919
1920
  */
1920
- declare type ByType<Type extends EventType> = Payload_2<Type>;
1921
+ declare type ByType<Type extends EventType> = Payload_3<Type>;
1921
1922
 
1922
1923
  /**
1923
1924
  * Extracts a single event type matching the given key from the Window {@link Event} union.
@@ -1926,7 +1927,7 @@ declare type ByType<Type extends EventType> = Payload_2<Type>;
1926
1927
  *
1927
1928
  * @typeParam Type String key specifying the event to extract
1928
1929
  */
1929
- declare type ByType_2<Type extends EventType_2> = Payload_3<Type>;
1930
+ declare type ByType_2<Type extends EventType_2> = Payload_4<Type>;
1930
1931
 
1931
1932
  /**
1932
1933
  * Extracts a single event type matching the given key from the Application {@link Event} union.
@@ -1935,7 +1936,7 @@ declare type ByType_2<Type extends EventType_2> = Payload_3<Type>;
1935
1936
  *
1936
1937
  * @typeParam Type String key specifying the event to extract
1937
1938
  */
1938
- declare type ByType_3<Type extends EventType_3> = Payload_4<Type>;
1939
+ declare type ByType_3<Type extends EventType_3> = Payload_5<Type>;
1939
1940
 
1940
1941
  /**
1941
1942
  * Extracts a single event type matching the given key from the ExternalApplication {@link Event} union.
@@ -1944,7 +1945,7 @@ declare type ByType_3<Type extends EventType_3> = Payload_4<Type>;
1944
1945
  *
1945
1946
  * @typeParam Type String key specifying the event to extract
1946
1947
  */
1947
- declare type ByType_4<Type extends EventType_4> = Payload_5<Type>;
1948
+ declare type ByType_4<Type extends EventType_4> = Payload_6<Type>;
1948
1949
 
1949
1950
  /**
1950
1951
  * Extracts a single event type matching the given key from the Frame {@link Event} union.
@@ -1953,7 +1954,7 @@ declare type ByType_4<Type extends EventType_4> = Payload_5<Type>;
1953
1954
  *
1954
1955
  * @typeParam Type String key specifying the event to extract
1955
1956
  */
1956
- declare type ByType_5<Type extends EventType_5> = Payload_6<Type>;
1957
+ declare type ByType_5<Type extends EventType_5> = Payload_7<Type>;
1957
1958
 
1958
1959
  /**
1959
1960
  * Extracts a single event type matching the given key from the GlobalHotkey {@link Event} union.
@@ -1962,7 +1963,7 @@ declare type ByType_5<Type extends EventType_5> = Payload_6<Type>;
1962
1963
  *
1963
1964
  * @typeParam Type String key specifying the event to extract
1964
1965
  */
1965
- declare type ByType_6<Type extends EventType_6> = Payload_7<Type>;
1966
+ declare type ByType_6<Type extends EventType_6> = Payload_8<Type>;
1966
1967
 
1967
1968
  /**
1968
1969
  * Extracts a single event type matching the given key from the Platform {@link Event} union.
@@ -1971,7 +1972,7 @@ declare type ByType_6<Type extends EventType_6> = Payload_7<Type>;
1971
1972
  *
1972
1973
  * @typeParam Type String key specifying the event to extract
1973
1974
  */
1974
- declare type ByType_7<Type extends EventType_7> = Payload_8<Type>;
1975
+ declare type ByType_7<Type extends EventType_7> = Payload_9<Type>;
1975
1976
 
1976
1977
  /**
1977
1978
  * Extracts a single event type matching the given key from the System {@link Event} union.
@@ -1980,7 +1981,7 @@ declare type ByType_7<Type extends EventType_7> = Payload_8<Type>;
1980
1981
  *
1981
1982
  * @typeParam Type String key specifying the event to extract
1982
1983
  */
1983
- declare type ByType_8<Type extends EventType_8> = Payload_9<Type>;
1984
+ declare type ByType_8<Type extends EventType_8> = Payload_10<Type>;
1984
1985
 
1985
1986
  /**
1986
1987
  * Extracts a single event type matching the given key from the Layout DOM {@link Event} union.
@@ -1989,7 +1990,7 @@ declare type ByType_8<Type extends EventType_8> = Payload_9<Type>;
1989
1990
  *
1990
1991
  * @typeParam Type String key specifying the event to extract
1991
1992
  */
1992
- declare type ByType_9<Type extends EventType_9> = Payload_10<Type>;
1993
+ declare type ByType_9<Type extends EventType_9> = Payload_11<Type>;
1993
1994
 
1994
1995
  /**
1995
1996
  * Configuration for page capture.
@@ -3701,6 +3702,7 @@ declare type ContainerCreatedEvent = LayoutDOMEvent & {
3701
3702
 
3702
3703
  /**
3703
3704
  * Generated when content navigation or redirection is blocked by {@link OpenFin.DomainSettings}.
3705
+ * @interface
3704
3706
  */
3705
3707
  declare type ContentBlockedEvent = NamedEvent & {
3706
3708
  type: 'content-blocked';
@@ -4357,6 +4359,10 @@ declare type DomainSettingsRule = {
4357
4359
  * Settings applied when a webcontents has been navigated to a matched domain.
4358
4360
  */
4359
4361
  options: PerDomainSettings;
4362
+ /**
4363
+ * Options to use when comparing URIs to the `match` patterns.
4364
+ */
4365
+ matchOptions?: RuleMatchOptions;
4360
4366
  };
4361
4367
 
4362
4368
  /**
@@ -4801,9 +4807,7 @@ declare class EventAggregator extends EmitterMap {
4801
4807
  * @remarks Selects the correct type for the event
4802
4808
  * payload from the provided union based on the provided string literal type.
4803
4809
  */
4804
- declare type EventHandler<EmitterEvent extends BaseEvent, EventType extends string> = (payload: Extract<EmitterEvent, {
4805
- type: EventType;
4806
- }>, ...args: any[]) => void;
4810
+ declare type EventHandler<EmitterEvent extends BaseEvent, EventType extends string> = (payload: Payload_2<EmitterEvent, EventType>, ...args: any[]) => void;
4807
4811
 
4808
4812
  declare namespace Events {
4809
4813
  export {
@@ -4939,7 +4943,7 @@ declare namespace ExternalApplicationEvents {
4939
4943
  ExternalApplicationEvent,
4940
4944
  EventType_4 as EventType,
4941
4945
  ExternalApplicationEventType,
4942
- Payload_5 as Payload,
4946
+ Payload_6 as Payload,
4943
4947
  ByType_4 as ByType
4944
4948
  }
4945
4949
  }
@@ -5391,7 +5395,7 @@ declare namespace FrameEvents {
5391
5395
  FrameEvent,
5392
5396
  EventType_5 as EventType,
5393
5397
  FrameEventType,
5394
- Payload_6 as Payload,
5398
+ Payload_7 as Payload,
5395
5399
  ByType_5 as ByType
5396
5400
  }
5397
5401
  }
@@ -5631,7 +5635,7 @@ declare namespace GlobalHotkeyEvents {
5631
5635
  GlobalHotkeyEvent,
5632
5636
  EventType_6 as EventType,
5633
5637
  GlobalHotkeyEventType,
5634
- Payload_7 as Payload,
5638
+ Payload_8 as Payload,
5635
5639
  ByType_6 as ByType
5636
5640
  }
5637
5641
  }
@@ -7711,7 +7715,7 @@ declare namespace LayoutDOMEvents {
7711
7715
  LayoutStateChangedEvent,
7712
7716
  Event_12 as Event,
7713
7717
  EventType_9 as EventType,
7714
- Payload_10 as Payload,
7718
+ Payload_11 as Payload,
7715
7719
  ByType_9 as ByType
7716
7720
  }
7717
7721
  }
@@ -8898,10 +8902,42 @@ declare type NavigationRules = {
8898
8902
  allowlist?: string[];
8899
8903
  /** Forbidden URLs for navigation. */
8900
8904
  denylist?: string[];
8905
+ /**
8906
+ * Options to use when comparing URIs to the `allowlist` and `denylist` patterns.
8907
+ */
8908
+ matchOptions?: RuleMatchOptions;
8901
8909
  };
8902
8910
 
8903
8911
  declare type NewConnectConfig = ConfigWithUuid & ConfigWithRuntime;
8904
8912
 
8913
+ declare interface NodeNetworkInterfaceBase {
8914
+ address: string;
8915
+ netmask: string;
8916
+ mac: string;
8917
+ internal: boolean;
8918
+ cidr: string | null;
8919
+ }
8920
+
8921
+ declare type NodeNetworkInterfaceInfo = NodeNetworkInterfaceInfoIPv4 | NodeNetworkInterfaceInfoIPv6;
8922
+
8923
+ declare interface NodeNetworkInterfaceInfoIPv4 extends NodeNetworkInterfaceBase {
8924
+ family: 'IPv4';
8925
+ scopeid?: undefined;
8926
+ }
8927
+
8928
+ declare interface NodeNetworkInterfaceInfoIPv6 extends NodeNetworkInterfaceBase {
8929
+ family: 'IPv6';
8930
+ scopeid: number;
8931
+ }
8932
+
8933
+ declare interface NodeUserInfo {
8934
+ username: string;
8935
+ uid: number;
8936
+ gid: number;
8937
+ shell: string | null;
8938
+ homedir: string;
8939
+ }
8940
+
8905
8941
  /**
8906
8942
  * @interface
8907
8943
  */
@@ -9047,6 +9083,7 @@ declare namespace OpenFin_2 {
9047
9083
  Api,
9048
9084
  ApiSettings,
9049
9085
  InjectionType,
9086
+ RuleMatchOptions,
9050
9087
  NavigationRules,
9051
9088
  ContentNavigation,
9052
9089
  ContentRedirect,
@@ -9130,6 +9167,7 @@ declare namespace OpenFin_2 {
9130
9167
  Time,
9131
9168
  CpuInfo,
9132
9169
  GpuInfo,
9170
+ OSInfo,
9133
9171
  HostSpecs,
9134
9172
  PrinterInfo_2 as PrinterInfo,
9135
9173
  Dpi,
@@ -9339,6 +9377,25 @@ declare type OptionsChangedEvent = BaseEvent_5 & {
9339
9377
  diff: OpenFin_2.WindowOptionDiff;
9340
9378
  };
9341
9379
 
9380
+ /**
9381
+ * @interface
9382
+ * The keys represent the output from calling individual Node `os` APIs.
9383
+ * For example, `userInfo` will have the output of calling `os.userInfo()`. For more information
9384
+ * see [Node `os` API docs](https://nodejs.org/docs/latest-v20.x/api/os.html)
9385
+ */
9386
+ declare type OSInfo = {
9387
+ platform: string;
9388
+ release: string;
9389
+ version: string;
9390
+ /**
9391
+ * Throws if a user has no username or homedir.
9392
+ * See [Node os.userInfo docs for more info](https://nodejs.org/docs/latest-v20.x/api/os.html#osuserinfooptions)
9393
+ */
9394
+ userInfo: NodeUserInfo;
9395
+ hostname: string;
9396
+ networkInterfaces: Record<string, NodeNetworkInterfaceInfo[] | undefined>;
9397
+ };
9398
+
9342
9399
  declare type OverrideCallback<T extends any = PlatformProvider, U extends T = T> = (arg: Constructor<T>) => U | Promise<U>;
9343
9400
 
9344
9401
  /**
@@ -9367,86 +9424,110 @@ declare type Payload<Success extends boolean = boolean, Data = any> = {
9367
9424
  error?: Success extends false ? ErrorPlainObject | undefined : never;
9368
9425
  };
9369
9426
 
9427
+ /**
9428
+ * Extracts a single event type matching the given key from the System {@link Event} union.
9429
+ *
9430
+ * @see {@link ByType}
9431
+ *
9432
+ * @typeParam Type String key specifying the event to extract
9433
+ */
9434
+ declare type Payload_10<Type extends EventType_8> = BaseEvents.Payload<Event_11, Type>;
9435
+
9370
9436
  /**
9371
9437
  * Extracts a single event type matching the given key from the Layout DOM {@link Event} union.
9372
9438
  *
9373
9439
  * @typeParam Type String key specifying the event to extract
9374
9440
  */
9375
- declare type Payload_10<Type extends EventType_9> = Extract<Event_12, {
9441
+ declare type Payload_11<Type extends EventType_9> = Extract<Event_12, {
9376
9442
  type: Type;
9377
9443
  }>;
9378
9444
 
9445
+ /**
9446
+ * Extracts a single event type matching the given type key from the provided EmitterEvent union.
9447
+ *
9448
+ * @remarks Each event emitter namespace defines its own reduction of this type that fixes the Event parameter to
9449
+ * the appropriate payload union for that namespace.
9450
+ *
9451
+ * @typeParam Event Union of payloads for events on the given emitter
9452
+ * @see {@link ByType}
9453
+ *
9454
+ * @typeParam Type String key specifying the event to extract from the union
9455
+ *
9456
+ * @see {@link OpenFin.Events.ApplicationEvents.Payload}
9457
+ * @see {@link OpenFin.Events.ExternalApplicationEvents.Payload}
9458
+ * @see {@link OpenFin.Events.FrameEvents.Payload}
9459
+ * @see {@link OpenFin.Events.GlobalHotkeyEvents.Payload}
9460
+ * @see {@link OpenFin.Events.PlatformEvents.Payload}
9461
+ * @see {@link OpenFin.Events.SystemEvents.Payload}
9462
+ * @see {@link OpenFin.Events.ViewEvents.Payload}
9463
+ * @see {@link OpenFin.Events.WindowEvents.Payload}
9464
+ */
9465
+ declare type Payload_2<Event extends BaseEvent, EventType extends string> = Extract<Event, {
9466
+ type: EventType;
9467
+ }>;
9468
+
9379
9469
  /**
9380
9470
  * Extracts a single event type matching the given key from the View {@link Event} union.
9381
9471
  *
9472
+ * @see {@link ByType}
9473
+ *
9382
9474
  * @typeParam Type String key specifying the event to extract
9383
9475
  */
9384
- declare type Payload_2<Type extends EventType> = Extract<Event_4, {
9385
- type: Type;
9386
- }>;
9476
+ declare type Payload_3<Type extends EventType> = BaseEvents.Payload<Event_4, Type>;
9387
9477
 
9388
9478
  /**
9389
9479
  * Extracts a single event type matching the given key from the Window {@link Event} union.
9390
9480
  *
9481
+ * @see {@link ByType}
9482
+ *
9391
9483
  * @typeParam Type String key specifying the event to extract
9392
9484
  */
9393
- declare type Payload_3<Type extends EventType_2> = Extract<Event_6, {
9394
- type: Type;
9395
- }>;
9485
+ declare type Payload_4<Type extends EventType_2> = BaseEvents.Payload<Event_6, Type>;
9396
9486
 
9397
9487
  /**
9398
9488
  * Extracts a single event type matching the given key from the Application {@link Event} union.
9399
9489
  *
9490
+ * @see {@link ByType}
9491
+ *
9400
9492
  * @typeParam Type String key specifying the event to extract
9401
9493
  */
9402
- declare type Payload_4<Type extends EventType_3> = Extract<Event_3, {
9403
- type: Type;
9404
- }>;
9494
+ declare type Payload_5<Type extends EventType_3> = BaseEvents.Payload<Event_3, Type>;
9405
9495
 
9406
9496
  /**
9407
9497
  * Extracts a single event type matching the given key from the ExternalApplication {@link Event} union.
9408
9498
  *
9499
+ * @see {@link ByType}
9500
+ *
9409
9501
  * @typeParam Type String key specifying the event to extract
9410
9502
  */
9411
- declare type Payload_5<Type extends EventType_4> = Extract<Event_7, {
9412
- type: Type;
9413
- }>;
9503
+ declare type Payload_6<Type extends EventType_4> = BaseEvents.Payload<Event_7, Type>;
9414
9504
 
9415
9505
  /**
9416
9506
  * Extracts a single event type matching the given key from the Frame {@link Event} union.
9417
9507
  *
9508
+ * @see {@link ByType}
9509
+ *
9418
9510
  * @typeParam Type String key specifying the event to extract
9419
9511
  */
9420
- declare type Payload_6<Type extends EventType_5> = Extract<Event_8, {
9421
- type: Type;
9422
- }>;
9512
+ declare type Payload_7<Type extends EventType_5> = BaseEvents.Payload<Event_8, Type>;
9423
9513
 
9424
9514
  /**
9425
9515
  * Extracts a single event type matching the given key from the GlobalHotkey {@link Event} union.
9426
9516
  *
9517
+ * @see {@link ByType}
9518
+ *
9427
9519
  * @typeParam Type String key specifying the event to extract
9428
9520
  */
9429
- declare type Payload_7<Type extends EventType_6> = Extract<Event_9, {
9430
- type: Type;
9431
- }>;
9521
+ declare type Payload_8<Type extends EventType_6> = BaseEvents.Payload<Event_9, Type>;
9432
9522
 
9433
9523
  /**
9434
9524
  * Extracts a single event type matching the given key from the Platform {@link Event} union.
9435
9525
  *
9436
- * @typeParam Type String key specifying the event to extract
9437
- */
9438
- declare type Payload_8<Type extends EventType_7> = Extract<Event_10, {
9439
- type: Type;
9440
- }>;
9441
-
9442
- /**
9443
- * Extracts a single event type matching the given key from the System {@link Event} union.
9526
+ * @see {@link ByType}
9444
9527
  *
9445
9528
  * @typeParam Type String key specifying the event to extract
9446
9529
  */
9447
- declare type Payload_9<Type extends EventType_8> = Extract<Event_11, {
9448
- type: Type;
9449
- }>;
9530
+ declare type Payload_9<Type extends EventType_7> = BaseEvents.Payload<Event_10, Type>;
9450
9531
 
9451
9532
  /**
9452
9533
  * @interface
@@ -10141,7 +10222,7 @@ declare namespace PlatformEvents {
10141
10222
  PlatformEvent,
10142
10223
  EventType_7 as EventType,
10143
10224
  PlatformEventType,
10144
- Payload_8 as Payload,
10225
+ Payload_9 as Payload,
10145
10226
  ByType_7 as ByType
10146
10227
  }
10147
10228
  }
@@ -11576,6 +11657,8 @@ declare interface ProtocolMap extends ProtocolMapBase {
11576
11657
  };
11577
11658
  response: void;
11578
11659
  };
11660
+ 'get-host-specs': GetterCall<OpenFin_2.HostSpecs>;
11661
+ 'get-os-info': GetterCall<OpenFin_2.OSInfo>;
11579
11662
  'system-get-printers': GetterCall<OpenFin_2.PrinterInfo[]>;
11580
11663
  'system-register-shutdown-handler': VoidCall;
11581
11664
  'get-domain-settings': ApiCall<OpenFin_2.ApplicationIdentity, OpenFin_2.DefaultDomainSettings>;
@@ -11969,6 +12052,17 @@ declare interface RTCProtocolOffer extends ProtocolPacketBase {
11969
12052
  };
11970
12053
  }
11971
12054
 
12055
+ /**
12056
+ * Controls the behavior of the navigation URI pattern matching algorithm.
12057
+ */
12058
+ declare type RuleMatchOptions = {
12059
+ /**
12060
+ * Matches all schemes rather than just http and https when a wild card is specified. For example, `'*://*.site.com'` will
12061
+ * only match urls which begin with `'http:'` or `'https:'` unless this setting is `true`.
12062
+ */
12063
+ matchAllSchemes?: boolean;
12064
+ };
12065
+
11972
12066
  declare type RunRequestedEvent = OpenFin_2.ApplicationEvents.RunRequestedEvent;
11973
12067
 
11974
12068
  /**
@@ -12421,7 +12515,7 @@ declare type Snapshot = {
12421
12515
  * _Note_ - In the case of using a custom provider, if a window has a layout property but does not call _Layout.init_ this event may not fire.
12422
12516
  * @interface
12423
12517
  */
12424
- declare type SnapshotAppliedEvent = BaseEvent & {
12518
+ declare type SnapshotAppliedEvent = BaseEvents.BaseEvent & {
12425
12519
  topic: 'application';
12426
12520
  type: 'platform-snapshot-applied';
12427
12521
  };
@@ -12905,7 +12999,8 @@ declare class System extends EmitterBase<OpenFin_2.SystemEvent> {
12905
12999
  */
12906
13000
  getRvmInfo(): Promise<OpenFin_2.RVMInfo>;
12907
13001
  /**
12908
- * Retrieves system information.
13002
+ * Retrieves general system information. If you need more detailed information about the
13003
+ * OS and the currently logged in user, use `fin.System.getOSInfo()` instead.
12909
13004
  *
12910
13005
  * @example
12911
13006
  * ```js
@@ -12913,6 +13008,15 @@ declare class System extends EmitterBase<OpenFin_2.SystemEvent> {
12913
13008
  * ```
12914
13009
  */
12915
13010
  getHostSpecs(): Promise<OpenFin_2.HostSpecs>;
13011
+ /**
13012
+ * Retrieves information about the OS and the currently logged in user.
13013
+ *
13014
+ * @example
13015
+ * ```js
13016
+ * fin.System.getOSInfo().then(specs => console.log(specs)).catch(err => console.log(err));
13017
+ * ```
13018
+ */
13019
+ getOSInfo(): Promise<OpenFin_2.OSInfo>;
12916
13020
  /**
12917
13021
  * Runs an executable or batch file. A path to the file must be included in options.
12918
13022
  * <br> A uuid may be optionally provided. If not provided, OpenFin will create a uuid for the new process.
@@ -14026,7 +14130,7 @@ declare namespace SystemEvents {
14026
14130
  SystemEvent,
14027
14131
  EventType_8 as EventType,
14028
14132
  SystemEventType,
14029
- Payload_9 as Payload,
14133
+ Payload_10 as Payload,
14030
14134
  ByType_8 as ByType
14031
14135
  }
14032
14136
  }
@@ -14040,6 +14144,7 @@ declare type SystemEventType = EventType_8;
14040
14144
  * @interface
14041
14145
  */
14042
14146
  declare type SystemPermissions = {
14147
+ getOSInfo: boolean;
14043
14148
  getAllExternalWindows: boolean;
14044
14149
  launchExternalProcess: boolean | {
14045
14150
  enabled: boolean;
@@ -15047,7 +15152,7 @@ declare namespace ViewEvents {
15047
15152
  PropagatedViewEvent,
15048
15153
  PropagatedEventType_2 as PropagatedEventType,
15049
15154
  PropagatedViewEventType,
15050
- Payload_2 as Payload,
15155
+ Payload_3 as Payload,
15051
15156
  ByType
15052
15157
  }
15053
15158
  }
@@ -17568,7 +17673,7 @@ declare namespace WindowEvents {
17568
17673
  PropagatedEvent_3 as PropagatedEvent,
17569
17674
  PropagatedWindowEvent,
17570
17675
  PropagatedWindowEventType,
17571
- Payload_3 as Payload,
17676
+ Payload_4 as Payload,
17572
17677
  ByType_2 as ByType
17573
17678
  }
17574
17679
  }