text:
Node.js may deprecate APIs for any of the following reasons:

* Use of the API is unsafe.
* An improved alternative API is available.
* Breaking changes to the API are expected in a future major release.

Node.js utilizes three kinds of Deprecations:

* Documentation-only
* Runtime
* End-of-Life

A Documentation-only deprecation is one that is expressed only within the
Node.js API docs. These generate no side-effects while running Node.js.
Some Documentation-only deprecations trigger a runtime warning when launched
with [`--pending-deprecation`][] flag (or its alternative,
`NODE_PENDING_DEPRECATION=1` environment variable), similarly to Runtime
deprecations below. Documentation-only deprecations that support that flag
are explicitly labeled as such in the
[list of Deprecated APIs](#deprecations_list_of_deprecated_apis).

A Runtime deprecation will, by default, generate a process warning that will
be printed to `stderr` the first time the deprecated API is used. When the
[`--throw-deprecation`][] command-line flag is used, a Runtime deprecation will
cause an error to be thrown.

An End-of-Life deprecation is used when functionality is or will soon be removed
from Node.js.

## Revoking deprecations

Occasionally, the deprecation of an API may be reversed. In such situations,
this document will be updated with information relevant to the decision.
However, the deprecation identifier will not be modified.

## List of deprecated APIs

### DEP0001: `http.OutgoingMessage.prototype.flush`

Type: Runtime

The `OutgoingMessage.prototype.flush()` method is deprecated. Use
`OutgoingMessage.prototype.flushHeaders()` instead.

### DEP0002: `require('_linklist')`

Type: End-of-Life

The `_linklist` module is deprecated. Please use a userland alternative.

### DEP0003: `_writableState.buffer`

Type: Runtime

The `_writableState.buffer` property is deprecated. Use the
`_writableState.getBuffer()` method instead.

### DEP0004: `CryptoStream.prototype.readyState`

Type: End-of-Life

The `CryptoStream.prototype.readyState` property was removed.

### DEP0005: `Buffer()` constructor

Type: Runtime (supports [`--pending-deprecation`][])

The `Buffer()` function and `new Buffer()` constructor are deprecated due to
API usability issues that can lead to accidental security issues.

As an alternative, use one of the following methods of constructing `Buffer`
objects:

* [`Buffer.alloc(size[, fill[, encoding]])`][alloc]: Create a `Buffer` with
  *initialized* memory.
* [`Buffer.allocUnsafe(size)`][alloc_unsafe_size]: Create a `Buffer` with
  *uninitialized* memory.
* [`Buffer.allocUnsafeSlow(size)`][]: Create a `Buffer` with *uninitialized*
   memory.
* [`Buffer.from(array)`][]: Create a `Buffer` with a copy of `array`
* [`Buffer.from(arrayBuffer[, byteOffset[, length]])`][from_arraybuffer] -
  Create a `Buffer` that wraps the given `arrayBuffer`.
* [`Buffer.from(buffer)`][]: Create a `Buffer` that copies `buffer`.
* [`Buffer.from(string[, encoding])`][from_string_encoding]: Create a `Buffer`
  that copies `string`.

Without `--pending-deprecation`, runtime warnings occur only for code not in
`node_modules`. This means there will not be deprecation warnings for
`Buffer()` usage in dependencies. With `--pending-deprecation`, a runtime
warning results no matter where the `Buffer()` usage occurs.

### DEP0006: `child_process` `options.customFds`

Type: End-of-Life

Within the [`child_process`][] module's `spawn()`, `fork()`, and `exec()`
methods, the `options.customFds` option is deprecated. The `options.stdio`
option should be used instead.

### DEP0007: Replace `cluster` `worker.suicide` with `worker.exitedAfterDisconnect`

Type: End-of-Life

In an earlier version of the Node.js `cluster`, a boolean property with the name
`suicide` was added to the `Worker` object. The intent of this property was to
provide an indication of how and why the `Worker` instance exited. In Node.js
6.0.0, the old property was deprecated and replaced with a new
[`worker.exitedAfterDisconnect`][] property. The old property name did not
precisely describe the actual semantics and was unnecessarily emotion-laden.

### DEP0008: `require('constants')`

Type: Documentation-only

The `constants` module is deprecated. When requiring access to constants
relevant to specific Node.js builtin modules, developers should instead refer
to the `constants` property exposed by the relevant module. For instance,
`require('fs').constants` and `require('os').constants`.

### DEP0009: `crypto.pbkdf2` without digest

Type: Runtime

Use of the [`crypto.pbkdf2()`][] API without specifying a digest was deprecated
in Node.js 6.0 because the method defaulted to using the non-recommended
`'SHA1'` digest. Previously, a deprecation warning was printed. Starting in
Node.js 8.0.0, calling `crypto.pbkdf2()` or `crypto.pbkdf2Sync()` with
`digest` set to `undefined` will throw a `TypeError`.

Beginning in Node.js v11.0.0, calling these functions with `digest` set to
`null` will print a deprecation warning to align with the behavior when `digest`
is `undefined`.

### DEP0010: `crypto.createCredentials`

Type: End-of-Life

The `crypto.createCredentials()` API was removed. Please use
[`tls.createSecureContext()`][] instead.

### DEP0011: `crypto.Credentials`

Type: End-of-Life

The `crypto.Credentials` class was removed. Please use [`tls.SecureContext`][]
instead.

### DEP0012: `Domain.dispose`

Type: End-of-Life

`Domain.dispose()` has been removed. Recover from failed I/O actions
explicitly via error event handlers set on the domain instead.

### DEP0013: `fs` asynchronous function without callback

Type: End-of-Life

Calling an asynchronous function without a callback throws a `TypeError`
in Node.js 10.0.0 onwards. See <https://github.com/nodejs/node/pull/12562>.

### DEP0014: `fs.read` legacy String interface

Type: End-of-Life

The [`fs.read()`][] legacy `String` interface is deprecated. Use the `Buffer`
API as mentioned in the documentation instead.

### DEP0015: `fs.readSync` legacy String interface

Type: End-of-Life

The [`fs.readSync()`][] legacy `String` interface is deprecated. Use the
`Buffer` API as mentioned in the documentation instead.

### DEP0016: `GLOBAL`/`root`

Type: Runtime

The `GLOBAL` and `root` aliases for the `global` property are deprecated
and should no longer be used.

### DEP0017: `Intl.v8BreakIterator`

Type: End-of-Life

`Intl.v8BreakIterator` was a non-standard extension and has been removed.
See [`Intl.Segmenter`](https://github.com/tc39/proposal-intl-segmenter).

### DEP0018: Unhandled promise rejections

Type: Runtime

Unhandled promise rejections are deprecated. In the future, promise rejections
that are not handled will terminate the Node.js process with a non-zero exit
code.

### DEP0019: `require('.')` resolved outside directory

Type: End-of-Life

In certain cases, `require('.')` could resolve outside the package directory.
This behavior has been removed.

### DEP0020: `Server.connections`

Type: Runtime

The [`Server.connections`][] property is deprecated. Please use the
[`Server.getConnections()`][] method instead.

### DEP0021: `Server.listenFD`

Type: End-of-Life

The `Server.listenFD()` method was deprecated and removed. Please use
[`Server.listen({fd: <number>})`][] instead.

### DEP0022: `os.tmpDir()`

Type: Runtime

The `os.tmpDir()` API is deprecated. Please use [`os.tmpdir()`][] instead.

### DEP0023: `os.getNetworkInterfaces()`

Type: End-of-Life

The `os.getNetworkInterfaces()` method is deprecated. Please use the
[`os.networkInterfaces()`][] method instead.

### DEP0024: `REPLServer.prototype.convertToContext()`

Type: End-of-Life

The `REPLServer.prototype.convertToContext()` API has been removed.

### DEP0025: `require('sys')`

Type: Runtime

The `sys` module is deprecated. Please use the [`util`][] module instead.

### DEP0026: `util.print()`

Type: End-of-Life

`util.print()` has been removed. Please use [`console.log()`][] instead.

### DEP0027: `util.puts()`

Type: End-of-Life

`util.puts()` has been removed. Please use [`console.log()`][] instead.

### DEP0028: `util.debug()`

Type: End-of-Life

`util.debug()` has been removed. Please use [`console.error()`][] instead.

### DEP0029: `util.error()`

Type: End-of-Life

`util.error()` has been removed. Please use [`console.error()`][] instead.

### DEP0030: `SlowBuffer`

Type: Documentation-only

The [`SlowBuffer`][] class is deprecated. Please use
[`Buffer.allocUnsafeSlow(size)`][] instead.

### DEP0031: `ecdh.setPublicKey()`

Type: Documentation-only

The [`ecdh.setPublicKey()`][] method is now deprecated as its inclusion in the
API is not useful.

### DEP0032: `domain` module

Type: Documentation-only

The [`domain`][] module is deprecated and should not be used.

### DEP0033: `EventEmitter.listenerCount()`

Type: Documentation-only

The [`EventEmitter.listenerCount(emitter, eventName)`][] API is
deprecated. Please use [`emitter.listenerCount(eventName)`][] instead.

### DEP0034: `fs.exists(path, callback)`

Type: Documentation-only

The [`fs.exists(path, callback)`][] API is deprecated. Please use
[`fs.stat()`][] or [`fs.access()`][] instead.

### DEP0035: `fs.lchmod(path, mode, callback)`

Type: Documentation-only

The [`fs.lchmod(path, mode, callback)`][] API is deprecated.

### DEP0036: `fs.lchmodSync(path, mode)`

Type: Documentation-only

The [`fs.lchmodSync(path, mode)`][] API is deprecated.

### DEP0037: `fs.lchown(path, uid, gid, callback)`

Type: Deprecation revoked

The [`fs.lchown(path, uid, gid, callback)`][] API was deprecated. The
deprecation was revoked because the requisite supporting APIs were added in
libuv.

### DEP0038: `fs.lchownSync(path, uid, gid)`

Type: Deprecation revoked

The [`fs.lchownSync(path, uid, gid)`][] API was deprecated. The deprecation was
revoked because the requisite supporting APIs were added in libuv.

### DEP0039: `require.extensions`

Type: Documentation-only

The [`require.extensions`][] property is deprecated.

### DEP0040: `punycode` module

Type: Documentation-only

The [`punycode`][] module is deprecated. Please use a userland alternative
instead.

### DEP0041: `NODE_REPL_HISTORY_FILE` environment variable

Type: End-of-Life

The `NODE_REPL_HISTORY_FILE` environment variable was removed. Please use
`NODE_REPL_HISTORY` instead.

### DEP0042: `tls.CryptoStream`

Type: End-of-Life

The [`tls.CryptoStream`][] class was removed. Please use
[`tls.TLSSocket`][] instead.

### DEP0043: `tls.SecurePair`

Type: Documentation-only

The [`tls.SecurePair`][] class is deprecated. Please use
[`tls.TLSSocket`][] instead.

### DEP0044: `util.isArray()`

Type: Documentation-only

The [`util.isArray()`][] API is deprecated. Please use `Array.isArray()`
instead.

### DEP0045: `util.isBoolean()`

Type: Documentation-only

The [`util.isBoolean()`][] API is deprecated.

### DEP0046: `util.isBuffer()`

Type: Documentation-only

The [`util.isBuffer()`][] API is deprecated. Please use
[`Buffer.isBuffer()`][] instead.

### DEP0047: `util.isDate()`

Type: Documentation-only

The [`util.isDate()`][] API is deprecated.

### DEP0048: `util.isError()`

Type: Documentation-only

The [`util.isError()`][] API is deprecated.

### DEP0049: `util.isFunction()`

Type: Documentation-only

The [`util.isFunction()`][] API is deprecated.

### DEP0050: `util.isNull()`

Type: Documentation-only

The [`util.isNull()`][] API is deprecated.

### DEP0051: `util.isNullOrUndefined()`

Type: Documentation-only

The [`util.isNullOrUndefined()`][] API is deprecated.

### DEP0052: `util.isNumber()`

Type: Documentation-only

The [`util.isNumber()`][] API is deprecated.

### DEP0053 `util.isObject()`

Type: Documentation-only

The [`util.isObject()`][] API is deprecated.

### DEP0054: `util.isPrimitive()`

Type: Documentation-only

The [`util.isPrimitive()`][] API is deprecated.

### DEP0055: `util.isRegExp()`

Type: Documentation-only

The [`util.isRegExp()`][] API is deprecated.

### DEP0056: `util.isString()`

Type: Documentation-only

The [`util.isString()`][] API is deprecated.

### DEP0057: `util.isSymbol()`

Type: Documentation-only

The [`util.isSymbol()`][] API is deprecated.

### DEP0058: `util.isUndefined()`

Type: Documentation-only

The [`util.isUndefined()`][] API is deprecated.

### DEP0059: `util.log()`

Type: Documentation-only

The [`util.log()`][] API is deprecated.

### DEP0060: `util._extend()`

Type: Documentation-only

The [`util._extend()`][] API is deprecated.

### DEP0061: `fs.SyncWriteStream`

Type: End-of-Life

The `fs.SyncWriteStream` class was never intended to be a publicly accessible
API and has been removed. No alternative API is available. Please use a userland
alternative.

### DEP0062: `node --debug`

Type: End-of-Life

`--debug` activates the legacy V8 debugger interface, which was removed as
of V8 5.8. It is replaced by Inspector which is activated with `--inspect`
instead.

### DEP0063: `ServerResponse.prototype.writeHeader()`

Type: Documentation-only

The `http` module `ServerResponse.prototype.writeHeader()` API is
deprecated. Please use `ServerResponse.prototype.writeHead()` instead.

The `ServerResponse.prototype.writeHeader()` method was never documented as an
officially supported API.

### DEP0064: `tls.createSecurePair()`

Type: Runtime

The `tls.createSecurePair()` API was deprecated in documentation in Node.js
0.11.3. Users should use `tls.Socket` instead.

### DEP0065: `repl.REPL_MODE_MAGIC` and `NODE_REPL_MODE=magic`

Type: End-of-Life

The `repl` module's `REPL_MODE_MAGIC` constant, used for `replMode` option, has
been removed. Its behavior has been functionally identical to that of
`REPL_MODE_SLOPPY` since Node.js 6.0.0, when V8 5.0 was imported. Please use
`REPL_MODE_SLOPPY` instead.

The `NODE_REPL_MODE` environment variable is used to set the underlying
`replMode` of an interactive `node` session. Its value, `magic`, is also
removed. Please use `sloppy` instead.

### DEP0066: `OutgoingMessage.prototype._headers, OutgoingMessage.prototype._headerNames`

Type: Runtime

The `http` module `OutgoingMessage.prototype._headers` and
`OutgoingMessage.prototype._headerNames` properties are deprecated. Use one of
the public methods (e.g. `OutgoingMessage.prototype.getHeader()`,
`OutgoingMessage.prototype.getHeaders()`,
`OutgoingMessage.prototype.getHeaderNames()`,
`OutgoingMessage.prototype.hasHeader()`,
`OutgoingMessage.prototype.removeHeader()`,
`OutgoingMessage.prototype.setHeader()`) for working with outgoing headers.

The `OutgoingMessage.prototype._headers` and
`OutgoingMessage.prototype._headerNames` properties were never documented as
officially supported properties.

### DEP0067: `OutgoingMessage.prototype._renderHeaders`

Type: Documentation-only

The `http` module `OutgoingMessage.prototype._renderHeaders()` API is
deprecated.

The `OutgoingMessage.prototype._renderHeaders` property was never documented as
an officially supported API.

### DEP0068: `node debug`

Type: Runtime

`node debug` corresponds to the legacy CLI debugger which has been replaced with
a V8-inspector based CLI debugger available through `node inspect`.

### DEP0069: `vm.runInDebugContext(string)`

Type: End-of-Life

DebugContext has been removed in V8 and is not available in Node.js 10+.

DebugContext was an experimental API.

### DEP0070: `async_hooks.currentId()`

Type: End-of-Life

`async_hooks.currentId()` was renamed to `async_hooks.executionAsyncId()` for
clarity.

This change was made while `async_hooks` was an experimental API.

### DEP0071: `async_hooks.triggerId()`

Type: End-of-Life

`async_hooks.triggerId()` was renamed to `async_hooks.triggerAsyncId()` for
clarity.

This change was made while `async_hooks` was an experimental API.

### DEP0072: `async_hooks.AsyncResource.triggerId()`

Type: End-of-Life

`async_hooks.AsyncResource.triggerId()` was renamed to
`async_hooks.AsyncResource.triggerAsyncId()` for clarity.

This change was made while `async_hooks` was an experimental API.

### DEP0073: Several internal properties of `net.Server`

Type: End-of-Life

Accessing several internal, undocumented properties of `net.Server` instances
with inappropriate names is deprecated.

As the original API was undocumented and not generally useful for non-internal
code, no replacement API is provided.

### DEP0074: `REPLServer.bufferedCommand`

Type: Runtime

The `REPLServer.bufferedCommand` property was deprecated in favor of
[`REPLServer.clearBufferedCommand()`][].

### DEP0075: `REPLServer.parseREPLKeyword()`

Type: Runtime

`REPLServer.parseREPLKeyword()` was removed from userland visibility.

### DEP0076: `tls.parseCertString()`

Type: Runtime

`tls.parseCertString()` is a trivial parsing helper that was made public by
mistake. This function can usually be replaced with:

```js
const querystring = require('querystring');
querystring.parse(str, '\n', '=');
```

This function is not completely equivalent to `querystring.parse()`. One
difference is that `querystring.parse()` does url decoding:

```console
> querystring.parse('%E5%A5%BD=1', '\n', '=');
{ '好': '1' }
> tls.parseCertString('%E5%A5%BD=1');
{ '%E5%A5%BD': '1' }
```

### DEP0077: `Module._debug()`

Type: Runtime

`Module._debug()` is deprecated.

The `Module._debug()` function was never documented as an officially
supported API.

### DEP0078: `REPLServer.turnOffEditorMode()`

Type: Runtime

`REPLServer.turnOffEditorMode()` was removed from userland visibility.

### DEP0079: Custom inspection function on objects via `.inspect()`

Type: End-of-Life

Using a property named `inspect` on an object to specify a custom inspection
function for [`util.inspect()`][] is deprecated. Use [`util.inspect.custom`][]
instead. For backward compatibility with Node.js prior to version 6.4.0, both
may be specified.

### DEP0080: `path._makeLong()`

Type: Documentation-only

The internal `path._makeLong()` was not intended for public use. However,
userland modules have found it useful. The internal API is deprecated
and replaced with an identical, public `path.toNamespacedPath()` method.

### DEP0081: `fs.truncate()` using a file descriptor

Type: Runtime

`fs.truncate()` `fs.truncateSync()` usage with a file descriptor is
deprecated. Please use `fs.ftruncate()` or `fs.ftruncateSync()` to work with
file descriptors.

### DEP0082: `REPLServer.prototype.memory()`

Type: Runtime

`REPLServer.prototype.memory()` is only necessary for the internal mechanics of
the `REPLServer` itself. Do not use this function.

### DEP0083: Disabling ECDH by setting `ecdhCurve` to `false`

Type: End-of-Life.

The `ecdhCurve` option to `tls.createSecureContext()` and `tls.TLSSocket` could
be set to `false` to disable ECDH entirely on the server only. This mode was
deprecated in preparation for migrating to OpenSSL 1.1.0 and consistency with
the client and is now unsupported. Use the `ciphers` parameter instead.

### DEP0084: requiring bundled internal dependencies

Type: End-of-Life

Since Node.js versions 4.4.0 and 5.2.0, several modules only intended for
internal usage were mistakenly exposed to user code through `require()`. These
modules were:

* `v8/tools/codemap`
* `v8/tools/consarray`
* `v8/tools/csvparser`
* `v8/tools/logreader`
* `v8/tools/profile_view`
* `v8/tools/profile`
* `v8/tools/SourceMap`
* `v8/tools/splaytree`
* `v8/tools/tickprocessor-driver`
* `v8/tools/tickprocessor`
* `node-inspect/lib/_inspect` (from 7.6.0)
* `node-inspect/lib/internal/inspect_client` (from 7.6.0)
* `node-inspect/lib/internal/inspect_repl` (from 7.6.0)

The `v8/*` modules do not have any exports, and if not imported in a specific
order would in fact throw errors. As such there are virtually no legitimate use
cases for importing them through `require()`.

On the other hand, `node-inspect` may be installed locally through a package
manager, as it is published on the npm registry under the same name. No source
code modification is necessary if that is done.

### DEP0085: AsyncHooks sensitive API

Type: End-of-Life

The AsyncHooks sensitive API was never documented and had various minor issues.
Use the `AsyncResource` API instead. See
<https://github.com/nodejs/node/issues/15572>.

### DEP0086: Remove `runInAsyncIdScope`

Type: End-of-Life

`runInAsyncIdScope` doesn't emit the `'before'` or `'after'` event and can thus
cause a lot of issues. See <https://github.com/nodejs/node/issues/14328>.

### DEP0089: `require('assert')`

Type: Deprecation revoked

Importing assert directly was not recommended as the exposed functions use
loose equality checks. The deprecation was revoked because use of the `assert`
module is not discouraged, and the deprecation caused end user confusion.

### DEP0090: Invalid GCM authentication tag lengths

Type: End-of-Life

Node.js used to support all GCM authentication tag lengths which are accepted by
OpenSSL when calling [`decipher.setAuthTag()`][]. Beginning with Node.js
v11.0.0, only authentication tag lengths of 128, 120, 112, 104, 96, 64, and 32
bits are allowed. Authentication tags of other lengths are invalid per
[NIST SP 800-38D][].

### DEP0091: `crypto.DEFAULT_ENCODING`

Type: Runtime

The [`crypto.DEFAULT_ENCODING`][] property is deprecated.

### DEP0092: Top-level `this` bound to `module.exports`

Type: Documentation-only

Assigning properties to the top-level `this` as an alternative
to `module.exports` is deprecated. Developers should use `exports`
or `module.exports` instead.

### DEP0093: `crypto.fips` is deprecated and replaced.

Type: Documentation-only

The [`crypto.fips`][] property is deprecated. Please use `crypto.setFips()`
and `crypto.getFips()` instead.

### DEP0094: Using `assert.fail()` with more than one argument.

Type: Runtime

Using `assert.fail()` with more than one argument is deprecated. Use
`assert.fail()` with only one argument or use a different `assert` module
method.

### DEP0095: `timers.enroll()`

Type: Runtime

`timers.enroll()` is deprecated. Please use the publicly documented
[`setTimeout()`][] or [`setInterval()`][] instead.

### DEP0096: `timers.unenroll()`

Type: Runtime

`timers.unenroll()` is deprecated. Please use the publicly documented
[`clearTimeout()`][] or [`clearInterval()`][] instead.

### DEP0097: `MakeCallback` with `domain` property

Type: Runtime

Users of `MakeCallback` that add the `domain` property to carry context,
should start using the `async_context` variant of `MakeCallback` or
`CallbackScope`, or the high-level `AsyncResource` class.

### DEP0098: AsyncHooks embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs

Type: End-of-Life

The embedded API provided by AsyncHooks exposes `.emitBefore()` and
`.emitAfter()` methods which are very easy to use incorrectly which can lead
to unrecoverable errors.

Use [`asyncResource.runInAsyncScope()`][] API instead which provides a much
safer, and more convenient, alternative. See
<https://github.com/nodejs/node/pull/18513>.

### DEP0099: Async context-unaware `node::MakeCallback` C++ APIs

Type: Compile-time

Certain versions of `node::MakeCallback` APIs available to native modules are
deprecated. Please use the versions of the API that accept an `async_context`
parameter.

### DEP0100: `process.assert()`

Type: Runtime

`process.assert()` is deprecated. Please use the [`assert`][] module instead.

This was never a documented feature.

### DEP0101: `--with-lttng`

Type: End-of-Life

The `--with-lttng` compile-time option has been removed.

### DEP0102: Using `noAssert` in `Buffer#(read|write)` operations.

Type: End-of-Life

Using the `noAssert` argument has no functionality anymore. All input is going
to be verified, no matter if it is set to true or not. Skipping the verification
could lead to hard to find errors and crashes.

### DEP0103: `process.binding('util').is[...]` typechecks

Type: Documentation-only (supports [`--pending-deprecation`][])

Using `process.binding()` in general should be avoided. The type checking
methods in particular can be replaced by using [`util.types`][].

This deprecation has been superseded by the deprecation of the
`process.binding()` API ([DEP0111](#DEP0111)).

### DEP0104: `process.env` string coercion

Type: Documentation-only (supports [`--pending-deprecation`][])

When assigning a non-string property to [`process.env`][], the assigned value is
implicitly converted to a string. This behavior is deprecated if the assigned
value is not a string, boolean, or number. In the future, such assignment may
result in a thrown error. Please convert the property to a string before
assigning it to `process.env`.

### DEP0105: `decipher.finaltol`

Type: End-of-Life

`decipher.finaltol()` has never been documented and was an alias for
[`decipher.final()`][]. This API has been removed, and it is recommended to use
[`decipher.final()`][] instead.

### DEP0106: `crypto.createCipher` and `crypto.createDecipher`

Type: Runtime

Using [`crypto.createCipher()`][] and [`crypto.createDecipher()`][] should be
avoided as they use a weak key derivation function (MD5 with no salt) and static
initialization vectors. It is recommended to derive a key using
[`crypto.pbkdf2()`][] or [`crypto.scrypt()`][] and to use
[`crypto.createCipheriv()`][] and [`crypto.createDecipheriv()`][] to obtain the
[`Cipher`][] and [`Decipher`][] objects respectively.

### DEP0107: `tls.convertNPNProtocols()`

Type: End-of-Life

This was an undocumented helper function not intended for use outside Node.js
core and obsoleted by the removal of NPN (Next Protocol Negotiation) support.

### DEP0108: `zlib.bytesRead`

Type: Runtime

Deprecated alias for [`zlib.bytesWritten`][]. This original name was chosen
because it also made sense to interpret the value as the number of bytes
read by the engine, but is inconsistent with other streams in Node.js that
expose values under these names.

### DEP0109: `http`, `https`, and `tls` support for invalid URLs

Type: Runtime

Some previously supported (but strictly invalid) URLs were accepted through the
[`http.request()`][], [`http.get()`][], [`https.request()`][],
[`https.get()`][], and [`tls.checkServerIdentity()`][] APIs because those were
accepted by the legacy `url.parse()` API. The mentioned APIs now use the WHATWG
URL parser that requires strictly valid URLs. Passing an invalid URL is
deprecated and support will be removed in the future.

### DEP0110: `vm.Script` cached data

Type: Documentation-only

The `produceCachedData` option is deprecated. Use
[`script.createCachedData()`][] instead.

### DEP0111: `process.binding()`

Type: Documentation-only (supports [`--pending-deprecation`][])

`process.binding()` is for use by Node.js internal code only.

### DEP0112: `dgram` private APIs

Type: Runtime

The `dgram` module previously contained several APIs that were never meant to
accessed outside of Node.js core: `Socket.prototype._handle`,
`Socket.prototype._receiving`, `Socket.prototype._bindState`,
`Socket.prototype._queue`, `Socket.prototype._reuseAddr`,
`Socket.prototype._healthCheck()`, `Socket.prototype._stopReceiving()`, and
`dgram._createSocketHandle()`.

### DEP0113: `Cipher.setAuthTag()`, `Decipher.getAuthTag()`

Type: End-of-Life

`Cipher.setAuthTag()` and `Decipher.getAuthTag()` are no longer available. They
were never documented and would throw when called.

### DEP0114: `crypto._toBuf()`

Type: End-of-Life

The `crypto._toBuf()` function was not designed to be used by modules outside
of Node.js core and was removed.

### DEP0115: `crypto.prng()`, `crypto.pseudoRandomBytes()`, `crypto.rng()`

Type: Documentation-only (supports [`--pending-deprecation`][])

In recent versions of Node.js, there is no difference between
[`crypto.randomBytes()`][] and `crypto.pseudoRandomBytes()`. The latter is
deprecated along with the undocumented aliases `crypto.prng()` and
`crypto.rng()` in favor of [`crypto.randomBytes()`][] and may be removed in a
future release.

### DEP0116: Legacy URL API

Type: Documentation-only

The [Legacy URL API][] is deprecated. This includes [`url.format()`][],
[`url.parse()`][], [`url.resolve()`][], and the [legacy `urlObject`][]. Please
use the [WHATWG URL API][] instead.

### DEP0117: Native crypto handles

Type: End-of-Life

Previous versions of Node.js exposed handles to internal native objects through
the `_handle` property of the `Cipher`, `Decipher`, `DiffieHellman`,
`DiffieHellmanGroup`, `ECDH`, `Hash`, `Hmac`, `Sign`, and `Verify` classes.
The `_handle` property has been removed because improper use of the native
object can lead to crashing the application.

### DEP0118: `dns.lookup()` support for a falsy host name

Type: Runtime

Previous versions of Node.js supported `dns.lookup()` with a falsy host name
like `dns.lookup(false)` due to backward compatibility.
This behavior is undocumented and is thought to be unused in real world apps.
It will become an error in future versions of Node.js.

### DEP0119: `process.binding('uv').errname()` private API

Type: Documentation-only (supports [`--pending-deprecation`][])

`process.binding('uv').errname()` is deprecated. Please use
[`util.getSystemErrorName()`][] instead.

### DEP0120: Windows Performance Counter support

Type: End-of-Life

Windows Performance Counter support has been removed from Node.js. The
undocumented `COUNTER_NET_SERVER_CONNECTION()`,
`COUNTER_NET_SERVER_CONNECTION_CLOSE()`, `COUNTER_HTTP_SERVER_REQUEST()`,
`COUNTER_HTTP_SERVER_RESPONSE()`, `COUNTER_HTTP_CLIENT_REQUEST()`, and
`COUNTER_HTTP_CLIENT_RESPONSE()` functions have been deprecated.

### DEP0121: `net._setSimultaneousAccepts()`

Type: Runtime

The undocumented `net._setSimultaneousAccepts()` function was originally
intended for debugging and performance tuning when using the `child_process`
and `cluster` modules on Windows. The function is not generally useful and
is being removed. See discussion here:
<https://github.com/nodejs/node/issues/18391>

### DEP0122: `tls` `Server.prototype.setOptions()`

Type: Runtime

Please use `Server.prototype.setSecureContext()` instead.

### DEP0123: setting the TLS ServerName to an IP address

Type: Runtime

Setting the TLS ServerName to an IP address is not permitted by
[RFC 6066][]. This will be ignored in a future version.

### DEP0124: using `REPLServer.rli`

Type: Runtime

This property is a reference to the instance itself.

### DEP0125: `require('_stream_wrap')`

Type: Runtime

The `_stream_wrap` module is deprecated.

### DEP0126: `timers.active()`

Type: Runtime

The previously undocumented `timers.active()` is deprecated.
Please use the publicly documented [`timeout.refresh()`][] instead.
If re-referencing the timeout is necessary, [`timeout.ref()`][] can be used
with no performance impact since Node.js 10.

### DEP0127: `timers._unrefActive()`

Type: Runtime

The previously undocumented and "private" `timers._unrefActive()` is deprecated.
Please use the publicly documented [`timeout.refresh()`][] instead.
If unreferencing the timeout is necessary, [`timeout.unref()`][] can be used
with no performance impact since Node.js 10.

### DEP0128: modules with an invalid `main` entry and an `index.js` file

Type: Documentation-only (supports [`--pending-deprecation`][])

Modules that have an invalid `main` entry (e.g., `./does-not-exist.js`) and
also have an `index.js` file in the top level directory will resolve the
`index.js` file. That is deprecated and is going to throw an error in future
Node.js versions.

### DEP0129: `ChildProcess._channel`

Type: Documentation-only

The `_channel` property of child process objects returned by `spawn()` and
similar functions is not intended for public use. Use `ChildProcess.channel`
instead.

### DEP0130: `Module.createRequireFromPath()`

Type: Documentation-only

Module.createRequireFromPath() is deprecated. Please use [`module.createRequire()`][] instead.

### DEP0131: Legacy HTTP parser

Type: Documentation-only

The legacy HTTP parser, used by default in versions of Node.js prior to 12.0.0,
is deprecated. This deprecation applies to users of the
[`--http-parser=legacy`][] command-line flag.

### DEP0132: `worker.terminate()` with callback

Type: Runtime

Passing a callback to [`worker.terminate()`][] is deprecated. Use the returned
`Promise` instead, or a listener to the worker's `'exit'` event.

### DEP0133: `http` `connection`

Type: Documentation-only

Prefer [`response.socket`][] over [`response.connection`][] and
[`request.socket`][] over [`request.connection`][].

### DEP0134: `process._tickCallback`

Type: Documentation-only (supports [`--pending-deprecation`][])

The `process._tickCallback` property was never documented as
an officially supported API.

### DEP0136: `http` `finished`

Type: Documentation-only

[`response.finished`][] indicates whether [`response.end()`][] has been
called, not whether `'finish'` has been emitted and the underlying data
is flushed.

Use [`response.writableFinished`][] or [`response.writableEnded`][]
accordingly instead to avoid the ambigiuty.

To maintain existing behaviour `response.finished` should be replaced with
`response.writableEnded`.

[`--http-parser=legacy`]: cli.html#cli_http_parser_library
[`--pending-deprecation`]: cli.html#cli_pending_deprecation
[`--throw-deprecation`]: cli.html#cli_throw_deprecation
[`Buffer.allocUnsafeSlow(size)`]: buffer.html#buffer_class_method_buffer_allocunsafeslow_size
[`Buffer.from(array)`]: buffer.html#buffer_class_method_buffer_from_array
[`Buffer.from(buffer)`]: buffer.html#buffer_class_method_buffer_from_buffer
[`Buffer.isBuffer()`]: buffer.html#buffer_class_method_buffer_isbuffer_obj
[`Cipher`]: crypto.html#crypto_class_cipher
[`Decipher`]: crypto.html#crypto_class_decipher
[`EventEmitter.listenerCount(emitter, eventName)`]: events.html#events_eventemitter_listenercount_emitter_eventname
[`REPLServer.clearBufferedCommand()`]: repl.html#repl_replserver_clearbufferedcommand
[`Server.connections`]: net.html#net_server_connections
[`Server.getConnections()`]: net.html#net_server_getconnections_callback
[`Server.listen({fd: <number>})`]: net.html#net_server_listen_handle_backlog_callback
[`SlowBuffer`]: buffer.html#buffer_class_slowbuffer
[`assert`]: assert.html
[`asyncResource.runInAsyncScope()`]: async_hooks.html#async_hooks_asyncresource_runinasyncscope_fn_thisarg_args
[`child_process`]: child_process.html
[`clearInterval()`]: timers.html#timers_clearinterval_timeout
[`clearTimeout()`]: timers.html#timers_cleartimeout_timeout
[`console.error()`]: console.html#console_console_error_data_args
[`console.log()`]: console.html#console_console_log_data_args
[`crypto.DEFAULT_ENCODING`]: crypto.html#crypto_crypto_default_encoding
[`crypto.createCipher()`]: crypto.html#crypto_crypto_createcipher_algorithm_password_options
[`crypto.createCipheriv()`]: crypto.html#crypto_crypto_createcipheriv_algorithm_key_iv_options
[`crypto.createDecipher()`]: crypto.html#crypto_crypto_createdecipher_algorithm_password_options
[`crypto.createDecipheriv()`]: crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv_options
[`crypto.fips`]: crypto.html#crypto_crypto_fips
[`crypto.pbkdf2()`]: crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback
[`crypto.randomBytes()`]: crypto.html#crypto_crypto_randombytes_size_callback
[`crypto.scrypt()`]: crypto.html#crypto_crypto_scrypt_password_salt_keylen_options_callback
[`decipher.final()`]: crypto.html#crypto_decipher_final_outputencoding
[`decipher.setAuthTag()`]: crypto.html#crypto_decipher_setauthtag_buffer
[`domain`]: domain.html
[`ecdh.setPublicKey()`]: crypto.html#crypto_ecdh_setpublickey_publickey_encoding
[`emitter.listenerCount(eventName)`]: events.html#events_emitter_listenercount_eventname
[`fs.access()`]: fs.html#fs_fs_access_path_mode_callback
[`fs.exists(path, callback)`]: fs.html#fs_fs_exists_path_callback
[`fs.lchmod(path, mode, callback)`]: fs.html#fs_fs_lchmod_path_mode_callback
[`fs.lchmodSync(path, mode)`]: fs.html#fs_fs_lchmodsync_path_mode
[`fs.lchown(path, uid, gid, callback)`]: fs.html#fs_fs_lchown_path_uid_gid_callback
[`fs.lchownSync(path, uid, gid)`]: fs.html#fs_fs_lchownsync_path_uid_gid
[`fs.read()`]: fs.html#fs_fs_read_fd_buffer_offset_length_position_callback
[`fs.readSync()`]: fs.html#fs_fs_readsync_fd_buffer_offset_length_position
[`fs.stat()`]: fs.html#fs_fs_stat_path_options_callback
[`http.get()`]: http.html#http_http_get_options_callback
[`http.request()`]: http.html#http_http_request_options_callback
[`https.get()`]: https.html#https_https_get_options_callback
[`https.request()`]: https.html#https_https_request_options_callback
[`module.createRequire()`]: modules.html#modules_module_createrequire_filename
[`os.networkInterfaces()`]: os.html#os_os_networkinterfaces
[`os.tmpdir()`]: os.html#os_os_tmpdir
[`process.env`]: process.html#process_process_env
[`punycode`]: punycode.html
[`require.extensions`]: modules.html#modules_require_extensions
[`request.socket`]: http.html#http_request_socket
[`request.connection`]: http.html#http_request_connection
[`response.socket`]: http.html#http_response_socket
[`response.connection`]: http.html#http_response_connection
[`response.end()`]: http.html#http_response_end_data_encoding_callback
[`response.finished`]: #http_response_finished
[`response.writableFinished`]: #http_response_writablefinished
[`response.writableEnded`]: #http_response_writableended
[`script.createCachedData()`]: vm.html#vm_script_createcacheddata
[`setInterval()`]: timers.html#timers_setinterval_callback_delay_args
[`setTimeout()`]: timers.html#timers_settimeout_callback_delay_args
[`timeout.ref()`]: timers.html#timers_timeout_ref
[`timeout.refresh()`]: timers.html#timers_timeout_refresh
[`timeout.unref()`]: timers.html#timers_timeout_unref
[`tls.CryptoStream`]: tls.html#tls_class_cryptostream
[`tls.SecureContext`]: tls.html#tls_tls_createsecurecontext_options
[`tls.SecurePair`]: tls.html#tls_class_securepair
[`tls.TLSSocket`]: tls.html#tls_class_tls_tlssocket
[`tls.checkServerIdentity()`]: tls.html#tls_tls_checkserveridentity_hostname_cert
[`tls.createSecureContext()`]: tls.html#tls_tls_createsecurecontext_options
[`url.format()`]: url.html#url_url_format_urlobject
[`url.parse()`]: url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
[`url.resolve()`]: url.html#url_url_resolve_from_to
[`util._extend()`]: util.html#util_util_extend_target_source
[`util.getSystemErrorName()`]: util.html#util_util_getsystemerrorname_err
[`util.inspect()`]: util.html#util_util_inspect_object_options
[`util.inspect.custom`]: util.html#util_util_inspect_custom
[`util.isArray()`]: util.html#util_util_isarray_object
[`util.isBoolean()`]: util.html#util_util_isboolean_object
[`util.isBuffer()`]: util.html#util_util_isbuffer_object
[`util.isDate()`]: util.html#util_util_isdate_object
[`util.isError()`]: util.html#util_util_iserror_object
[`util.isFunction()`]: util.html#util_util_isfunction_object
[`util.isNull()`]: util.html#util_util_isnull_object
[`util.isNullOrUndefined()`]: util.html#util_util_isnullorundefined_object
[`util.isNumber()`]: util.html#util_util_isnumber_object
[`util.isObject()`]: util.html#util_util_isobject_object
[`util.isPrimitive()`]: util.html#util_util_isprimitive_object
[`util.isRegExp()`]: util.html#util_util_isregexp_object
[`util.isString()`]: util.html#util_util_isstring_object
[`util.isSymbol()`]: util.html#util_util_issymbol_object
[`util.isUndefined()`]: util.html#util_util_isundefined_object
[`util.log()`]: util.html#util_util_log_string
[`util.types`]: util.html#util_util_types
[`util`]: util.html
[`worker.exitedAfterDisconnect`]: cluster.html#cluster_worker_exitedafterdisconnect
[`worker.terminate()`]: worker_threads.html#worker_threads_worker_terminate
[`zlib.bytesWritten`]: zlib.html#zlib_zlib_byteswritten
[Legacy URL API]: url.html#url_legacy_url_api
[NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf
[RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3
[WHATWG URL API]: url.html#url_the_whatwg_url_api
[alloc]: buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding
[alloc_unsafe_size]: buffer.html#buffer_class_method_buffer_allocunsafe_size
[from_arraybuffer]: buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length
[from_string_encoding]: buffer.html#buffer_class_method_buffer_from_string_encoding
[legacy `urlObject`]: url.html#url_legacy_urlobject


text:
/*
 * CLOUD API
 *
 * An enterprise-grade Infrastructure is provided as a Service (IaaS) solution that can be managed through a browser-based \"Data Center Designer\" (DCD) tool or via an easy to use API.   The API allows you to perform a variety of management tasks such as spinning up additional servers, adding volumes, adjusting networking, and so forth. It is designed to allow users to leverage the same power and flexibility found within the DCD visual tool. Both tools are consistent with their concepts and lend well to making the experience smooth and intuitive.
 *
 * API version: 5.0
 */

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package ionossdk

import (
	"encoding/json"
)

// IpBlockProperties struct for IpBlockProperties
type IpBlockProperties struct {
	// A collection of IPs associated with the IP Block
	Ips *[]string `json:"ips,omitempty"`
	// Location of that IP Block. Property cannot be modified after creation (disallowed in update requests)
	Location *string `json:"location"`
	// The size of the IP block
	Size *int32 `json:"size"`
	// A name of that resource
	Name *string `json:"name,omitempty"`
	// Read-Only attribute. Lists consumption detail of an individual ip
	IpConsumers *[]IpConsumer `json:"ipConsumers,omitempty"`
}

// GetIps returns the Ips field value
// If the value is explicit nil, the zero value for []string will be returned
func (o *IpBlockProperties) GetIps() *[]string {
	if o == nil {
		return nil
	}

	return o.Ips
}

// GetIpsOk returns a tuple with the Ips field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IpBlockProperties) GetIpsOk() (*[]string, bool) {
	if o == nil {
		return nil, false
	}
	return o.Ips, true
}

// SetIps sets field value
func (o *IpBlockProperties) SetIps(v []string) {
	o.Ips = &v
}

// HasIps returns a boolean if a field has been set.
func (o *IpBlockProperties) HasIps() bool {
	if o != nil && o.Ips != nil {
		return true
	}

	return false
}

// GetLocation returns the Location field value
// If the value is explicit nil, the zero value for string will be returned
func (o *IpBlockProperties) GetLocation() *string {
	if o == nil {
		return nil
	}

	return o.Location
}

// GetLocationOk returns a tuple with the Location field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IpBlockProperties) GetLocationOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return o.Location, true
}

// SetLocation sets field value
func (o *IpBlockProperties) SetLocation(v string) {
	o.Location = &v
}

// HasLocation returns a boolean if a field has been set.
func (o *IpBlockProperties) HasLocation() bool {
	if o != nil && o.Location != nil {
		return true
	}

	return false
}

// GetSize returns the Size field value
// If the value is explicit nil, the zero value for int32 will be returned
func (o *IpBlockProperties) GetSize() *int32 {
	if o == nil {
		return nil
	}

	return o.Size
}

// GetSizeOk returns a tuple with the Size field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IpBlockProperties) GetSizeOk() (*int32, bool) {
	if o == nil {
		return nil, false
	}
	return o.Size, true
}

// SetSize sets field value
func (o *IpBlockProperties) SetSize(v int32) {
	o.Size = &v
}

// HasSize returns a boolean if a field has been set.
func (o *IpBlockProperties) HasSize() bool {
	if o != nil && o.Size != nil {
		return true
	}

	return false
}

// GetName returns the Name field value
// If the value is explicit nil, the zero value for string will be returned
func (o *IpBlockProperties) GetName() *string {
	if o == nil {
		return nil
	}

	return o.Name
}

// GetNameOk returns a tuple with the Name field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IpBlockProperties) GetNameOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return o.Name, true
}

// SetName sets field value
func (o *IpBlockProperties) SetName(v string) {
	o.Name = &v
}

// HasName returns a boolean if a field has been set.
func (o *IpBlockProperties) HasName() bool {
	if o != nil && o.Name != nil {
		return true
	}

	return false
}

// GetIpConsumers returns the IpConsumers field value
// If the value is explicit nil, the zero value for []IpConsumer will be returned
func (o *IpBlockProperties) GetIpConsumers() *[]IpConsumer {
	if o == nil {
		return nil
	}

	return o.IpConsumers
}

// GetIpConsumersOk returns a tuple with the IpConsumers field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IpBlockProperties) GetIpConsumersOk() (*[]IpConsumer, bool) {
	if o == nil {
		return nil, false
	}
	return o.IpConsumers, true
}

// SetIpConsumers sets field value
func (o *IpBlockProperties) SetIpConsumers(v []IpConsumer) {
	o.IpConsumers = &v
}

// HasIpConsumers returns a boolean if a field has been set.
func (o *IpBlockProperties) HasIpConsumers() bool {
	if o != nil && o.IpConsumers != nil {
		return true
	}

	return false
}

func (o IpBlockProperties) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}

	if o.Ips != nil {
		toSerialize["ips"] = o.Ips
	}

	if o.Location != nil {
		toSerialize["location"] = o.Location
	}

	if o.Size != nil {
		toSerialize["size"] = o.Size
	}

	if o.Name != nil {
		toSerialize["name"] = o.Name
	}

	if o.IpConsumers != nil {
		toSerialize["ipConsumers"] = o.IpConsumers
	}

	return json.Marshal(toSerialize)
}

type NullableIpBlockProperties struct {
	value *IpBlockProperties
	isSet bool
}

func (v NullableIpBlockProperties) Get() *IpBlockProperties {
	return v.value
}

func (v *NullableIpBlockProperties) Set(val *IpBlockProperties) {
	v.value = val
	v.isSet = true
}

func (v NullableIpBlockProperties) IsSet() bool {
	return v.isSet
}

func (v *NullableIpBlockProperties) Unset() {
	v.value = nil
	v.isSet = false
}

func NewNullableIpBlockProperties(val *IpBlockProperties) *NullableIpBlockProperties {
	return &NullableIpBlockProperties{value: val, isSet: true}
}

func (v NullableIpBlockProperties) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.value)
}

func (v *NullableIpBlockProperties) UnmarshalJSON(src []byte) error {
	v.isSet = true
	return json.Unmarshal(src, &v.value)
}

redpajama_set_name: RedPajamaGithub


text:
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using NinjaNye.SearchExtensions.Helpers.ExpressionBuilders.EqualsExpressionBuilder;

namespace NinjaNye.SearchExtensions
{
    public class EnumerableChildSearch<TParent, TChild, TProperty> : EnumerableChildSearchBase<TParent, TChild, TProperty>
    {
        public EnumerableChildSearch(IEnumerable<TParent> parent, Expression<Func<TParent, IEnumerable<TChild>>>[] childProperties, Expression<Func<TChild, TProperty>>[] properties)
            : base(parent, childProperties, properties, null, null)
        {
        }

        public EnumerableChildSearch(IEnumerable<TParent> parent, Expression<Func<TParent, IEnumerable<TChild>>>[] childProperties, Expression<Func<TChild, TProperty>>[] properties, Expression completeExpression, ParameterExpression childParameter)
            : base(parent, childProperties, properties, completeExpression, childParameter)
        {
        }

        /// <summary>
        /// Identifies items where any of the defined properties
        /// are greater than any of the supplied value
        /// </summary>
        /// <param name="value">Value to search for</param>
        public EnumerableChildSearch<TParent, TChild, TProperty> GreaterThan(TProperty value)
        {
            var greaterThanExpression = ExpressionBuilder.GreaterThanExpression(Properties, value);
            AppendExpression(greaterThanExpression);
            return this;
        }

        /// <summary>
        /// Identifies items where any of the defined properties
        /// are greater than or equal to any of the supplied value
        /// </summary>
        /// <param name="value">Value to search for</param>
        public EnumerableChildSearch<TParent, TChild, TProperty> GreaterThanOrEqualTo(TProperty value)
        {
            var greaterThanExpression = ExpressionBuilder.GreaterThanOrEqualExpression(Properties, value);
            AppendExpression(greaterThanExpression);
            return this;
        }

        /// <summary>
        /// Identifies items where any of the defined properties
        /// are less than any of the supplied value
        /// </summary>
        /// <param name="value">Value to search for</param>
        public EnumerableChildSearch<TParent, TChild, TProperty> LessThan(TProperty value)
        {
            var lessThanExpression = ExpressionBuilder.LessThanExpression(Properties, value);
            AppendExpression(lessThanExpression);
            return this;
        }

        /// <summary>
        /// Identifies items where any of the defined properties
        /// are less than or equal to any of the supplied value
        /// </summary>
        /// <param name="value">Value to search for</param>
        public EnumerableChildSearch<TParent, TChild, TProperty> LessThanOrEqualTo(TProperty value)
        {
            var lessThanExpression = ExpressionBuilder.LessThanOrEqualExpression(Properties, value);
            AppendExpression(lessThanExpression);
            return this;
        }

        /// <summary>
        /// Retrieves items where any of the defined properties
        /// are greater than <paramref name="minValue">minValue</paramref>
        /// AND less than <paramref name="maxValue">maxValue</paramref>
        /// </summary>
        public EnumerableChildSearch<TParent, TChild, TProperty> Between(TProperty minValue, TProperty maxValue)
        {
            var betweenExpression = ExpressionBuilder.BetweenExpression(Properties, minValue, maxValue);
            AppendExpression(betweenExpression);
            return this;
        }

        /// <summary>
        /// Retrieves items where any of the defined properties
        /// are equal to any of the supplied <paramref name="values">value</paramref>
        /// </summary>
        /// <param name="values">A collection of values to match upon</param>
        public EnumerableChildSearch<TParent, TChild, TProperty> EqualTo(params TProperty[] values)
        {
            var equalToExpression = ExpressionBuilder.EqualsExpression(Properties, values);
            AppendExpression(equalToExpression);
            return this;
        }
    }
}


text:
package storm

import (
	"bytes"
	"reflect"

	"github.com/asdine/storm/index"
	"github.com/boltdb/bolt"
)

// Save a structure
func (n *node) Save(data interface{}) error {
	ref := reflect.ValueOf(data)

	if !ref.IsValid() || ref.Kind() != reflect.Ptr || ref.Elem().Kind() != reflect.Struct {
		return ErrStructPtrNeeded
	}

	info, err := extract(&ref)
	if err != nil {
		return err
	}

	var id []byte

	if info.ID.IsZero {
		if !info.ID.IsOfIntegerFamily() || !n.s.autoIncrement {
			return ErrZeroID
		}
	} else {
		id, err = toBytes(info.ID.Value.Interface(), n.s.codec)
		if err != nil {
			return err
		}
	}

	var raw []byte
	// postpone encoding if AutoIncrement mode if enabled
	if !n.s.autoIncrement {
		raw, err = n.s.codec.Encode(data)
		if err != nil {
			return err
		}
	}

	if n.tx != nil {
		return n.save(n.tx, info, id, raw, data)
	}

	return n.s.Bolt.Update(func(tx *bolt.Tx) error {
		return n.save(tx, info, id, raw, data)
	})
}

func (n *node) save(tx *bolt.Tx, info *modelInfo, id []byte, raw []byte, data interface{}) error {
	bucket, err := n.CreateBucketIfNotExists(tx, info.Name)
	if err != nil {
		return err
	}

	if info.ID.IsZero {
		// isZero and integer, generate next sequence
		intID, _ := bucket.NextSequence()

		// convert to the right integer size
		info.ID.Value.Set(reflect.ValueOf(intID).Convert(info.ID.Type()))
		id, err = toBytes(info.ID.Value.Interface(), n.s.codec)
		if err != nil {
			return err
		}
	}

	if data != nil {
		if n.s.autoIncrement {
			raw, err = n.s.codec.Encode(data)
			if err != nil {
				return err
			}
		}
	}

	for fieldName, idxInfo := range info.Indexes {
		idx, err := getIndex(bucket, idxInfo.Type, fieldName)
		if err != nil {
			return err
		}

		if idxInfo.IsZero {
			err = idx.RemoveID(id)
			if err != nil {
				return err
			}
			continue
		}

		value, err := toBytes(idxInfo.Value.Interface(), n.s.codec)
		if err != nil {
			return err
		}

		var found bool
		idsSaved, err := idx.All(value, nil)
		if err != nil {
			return err
		}
		for _, idSaved := range idsSaved {
			if bytes.Compare(idSaved, id) == 0 {
				found = true
				break
			}
		}

		if found {
			continue
		}

		err = idx.RemoveID(id)
		if err != nil {
			return err
		}

		err = idx.Add(value, id)
		if err != nil {
			if err == index.ErrAlreadyExists {
				return ErrAlreadyExists
			}
			return err
		}
	}

	return bucket.Put(id, raw)
}

// Save a structure
func (s *DB) Save(data interface{}) error {
	return s.root.Save(data)
}


text:
<?php

defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * @modifiedBy Raul Mejía
 *
 * I've made some modifications in the base model to ease the interaction between the object and the database.
 *
 */

/**
 * Model Class
 *
 * @package		CodeIgniter
 * @subpackage	Libraries
 * @category	Libraries
 * @author		EllisLab Dev Team
 * @link		https://codeigniter.com/user_guide/libraries/config.html
 */
class CI_Model {

    protected $tableName = "";
    protected $hasMany = array();
    protected $belongsTo = array();
    protected $fields = "";
    protected $hasJoins = false;
    protected $primaryKey = "id";

    /**
	 * Class constructor
	 *
	 * @return	void
	 */
	public function __construct()
	{
		log_message('info', 'Model Class Initialized');

	}

	// --------------------------------------------------------------------

	/**
	 * __get magic
	 *
	 * Allows models to access CI's loaded classes using the same
	 * syntax as controllers.
	 *
	 * @param	string	$key
	*/
	public function __get($key)
	{
		// Debugging note:
		//	If you're here because you're getting an error message
		//	saying 'Undefined Property: system/core/Model.php', it's
		//	most likely a typo in your model code.
		return get_instance()->$key;
	}

        protected function startSelect($fields) {
            $this->db->select($fields);
        }

        /** Retrieve all records based on the parameters sent
         *
         * @param string $fields Fields to retrieve
         * @param array $parameters Parameters of the query
         * @return array An array of all the objects found
         */
        public function all($fields = "*",$parameters = array()) {
            $arrayResults = array();
            $this->startSelect($fields);
            $this->db->from($this->tableName);
            $this->setParameters($parameters);
            $query = $this->db->get();
            $results = $query->result();
            foreach($results as $result) {
                array_push($arrayResults,(array)$result);
            }
            return $arrayResults;
        }

        public function find($id = 0,$fields = "*",$parameters = array()) {

            if($id <= 0) {
                $this->response(NULL, REST_Controller::HTTP_BAD_REQUEST);
            }
            $this->startSelect($fields);
            $this->setParameters($parameters);
            $query = $this->db->get_where($this->tableName,array($this->tableName.".id" => $id));
            $result = $query->result();
            if($this->hasJoins) {
                $result = $this->warpResult($result);
            }
            return $result;
        }

        /** Transforms multiple nested results to merged array like Parent:{elements,child:{ChildElements}}
         * Very messy right now, needs cleaning
         *
         * @param type $result
         */
        public function warpResult($result) {
            $rows = (array) $result;
            $newElement = array();
            $warpped = array();
            $modelClass = get_class($this);
            $childs = array();
            $newChild = array();
            $pivot = $modelClass.ucwords($this->primaryKey);
            $lastPivot = NULL;
            foreach($rows as $row) {
                $row = (array)$row;
                if($lastPivot !== $row[$pivot]) {
                    $lastPivot = $row[$pivot];
                    if(!empty($childs)) {
                        $newElement = array_merge($newElement,$childs);
                    }
                    $childs = array();
                    if(!empty($newElement)) {
                        array_push($warpped,$newElement);
                    }
                    $newElement = array();
                    foreach($row as $field => $value) {
                        if(substr($field,0,  strlen($modelClass)) === $modelClass) {
                                $newElement[lcfirst(str_replace($modelClass,"",$field))] = $value;
                        }
                    }
                }

                foreach($this->hasMany as $childTable => $joinRules) {
                    $newChild = array();
                    foreach($row as $field => $value) {
                        if(substr($field,0,  strlen($childTable)) === $childTable) {
                            if($value !== null) {
                                $newChild[lcfirst(str_replace($childTable,"",$field))] = $value;
                            }
                        }
                    }
                    if(!empty($newChild)) {
                        if(!isset($childs[$childTable])) {
                            $childs[$childTable] = array();
                        }
                        array_push($childs[$childTable],$newChild);
                    }
                }
            }
            /**** Needs to make a function to not repeat it
             *
             */
                if(!empty($childs)) {
                    $newElement = array_merge($newElement,$childs);
                }
                if(!empty($newElement)) {
                    array_push($warpped,$newElement);
                }
                foreach($row as $field => $value) {
                    if(substr($field,0,  strlen($modelClass)) === $modelClass) {
                        $newElement[lcfirst(str_replace($modelClass,"",$field))] = $value;
                    }
                }

            /**
             *
             */

            return $warpped;
        }

        public function setParameters($parameters) {
            if(isset($parameters["joins"]) && is_array($parameters["joins"])) {
                $this->setJoins($parameters["joins"]);
            }
        }

        public function setJoins($joins) {
            foreach ($joins as $table => $conditions) {
                    $this->hasJoins = true;
                    $this->db->join($table,$conditions,"left");
                }
        }

        public function saveMany($arrayData = array()) {
            $saved = array();

            foreach($arrayData as $data) {
                array_push($saved,$this->save($data));
            }
            return $saved;
        }

        public function saveRelated($fullData = array(),$id = 0) {
            if(intval($id) >= 0) {
                foreach($fullData as $modelName => $data) {
                     $this->processRelated($modelName,$data,$id);
                }
            }
        }

        public function processRelated($modelName,$rows,$id) {
               foreach($rows as $row) {
                        $row = array_merge($row,array($this->hasMany[$modelName]["key"] => $id));
                        $this->$modelName->save($row);
                    }
        }

        public function save($data = array()) {

            $related = $this->getRelated($data);

            if(empty($related)) {
                $id = $this->saveRow($data);
            }
            else {
                $relatedToSave = $this->getRelatedData($data);
                $data = $this->clearData($data,$related);
                $id = $this->saveRow($data);
                $this->saveRelated($relatedToSave,$id);
            }
            return $id;
        }

        public function clearData($data = array(), $fields = array()) {
            foreach($fields as $field) {

                unset($data[$field]);
            }
            return $data;
        }

        public function getRelatedData($data = array()) {
            $relatedData = array();
            foreach($this->hasMany as $element => $array) {
                if(isset($data[$element])) {
                    $relatedData[$element] = $data[$element];
                }
            }
            return $relatedData;
        }

        public function getRelated($data) {
            $related = array();
            foreach($this->hasMany as $element => $array) {
                if(isset($data[$element])) {
                    array_push($related,$element);
                }
            }
            return $related;
        }

        function hasRelated($data) {
            $hasRelated = false;
            foreach($this->hasMany as $element => $array) {
                if(isset($data[$element])) {
                    $hasRelated = true;
                    break;
                }
            }
            return $hasRelated;
        }

        public function saveRow($data = array()) {
            $this->db->insert($this->tableName, $data);
            return $this->db->insert_id();
        }

        public function getTableName() {
            return $this->tableName;
        }

        public function getFields() {
            return $this->fields;
        }
}


text:
Simple plugin providing a common interface to list files in the media library.

## Features

* Easy media library query
* Android support (iOS coming soon)
* Pagination
* On the fly thumbnail generation (images only)

## Installation

```sh
$ cordova plugin add https://github.com/claudetech/cordova-plugin-media-lister.git
```

## Usage

```javascript
mediaLister.readLibrary({thumbnail: true, limit: 40, mediaTypes: ['image']}, function (result) {
    console.log(results.entries);
    // [{
    //     "id": 4238,
    //     "dateModified": 1433332510,
    //     "title": "DSC_0003",
    //     "height": 2160,
    //     "width": 3840,
    //     "path": "/storage/emulated/0/DCIM/100ANDRO/DSC_0003.JPG",
    //     "dateAdded": 1433332510,
    //     "mediaType": "image",
    //     "thumbnailPath": "/data/data/com.my.app/cache/12207-400x400.jpg",
    //     "mimeType": "image/jpeg",
    //     "size": "1811261"
    // }]
    console.log(result.nextOptions); // suport for pagination
    // {
    //     limit: 40,
    //     thumbnail: true,
    //     mediaTypes: ['image'],
    //     offset: 8
    // }
}, function (err) {
    console.log(err);
});
```

## TODO

* Limit thumbnail cache size

## License

This plugin is under the MIT license.
See [LICENSE](./LICENSE) for more info.


text:
using Microsoft.Xna.Framework;

using Faseway.GameLibrary.Content;
using Faseway.GameLibrary.Game;
using Faseway.GameLibrary.Game.Env;
using Faseway.GameLibrary.Logging;
using Faseway.GameLibrary.Rendering;

namespace Faseway.GameLibrary.Game.Scenes
{
    public class MiniMap : Scene
    {
        // Variables
        private Color _backgroundColor;
        private Color _playerColor;
        private Color _neutralColor;
        private Color _enemyColor;
        private Color _transparentColor;

        // Properties
        public World World { get; private set; }
        public int Factor { get; set; }

        // Constructor
        public MiniMap(World world)
            : base()
        {
            World = world;

            Factor = 8;
        }

        // Methods
        public override void OnEnter()
        {

        }

        public override void OnLeave()
        {

        }

        public override void LoadContent()
        {
            var mapDataPath = "Content\\Maps\\" + World.Map.Name;
            if (System.IO.File.Exists(mapDataPath + "_mini.tga"))
            {
                // TODO
            }
            Logger.Log("Loading minimap ({0}) ...", mapDataPath);

            _backgroundColor = Color.DarkSlateGray;
            _playerColor = Color.Green;
            _neutralColor = Color.White;
            _enemyColor = Color.DarkRed;
            _transparentColor = Color.Transparent;

            base.LoadContent();
        }

        public override void Draw(GameTime gameTime)
        {
            var graphics = Seed.Components.GetAndRequire<Graphics2D>();

            Vector2 offset = new Vector2(graphics.Window.ClientBounds.Width - 20 - World.Map.Bounds.Width / Factor, 20);
            Rectangle destination = new Rectangle((int)offset.X, (int)offset.Y, World.Map.Bounds.Width / Factor, World.Map.Bounds.Height / Factor);

            graphics.SpriteBatch.Begin();
            graphics.SpriteBatch.Draw(graphics.Pixel, destination, _backgroundColor);
            graphics.SpriteBatch.End();

            foreach (var entity in World.Environment)
            {
                if (entity == null) continue;
                if (!World.Map.Bounds.Contains(new Point((int)entity.Transform.Position.X, (int)entity.Transform.Position.Y))) continue;

                int x = (int)entity.Transform.Position.X / Factor;
                int y = (int)entity.Transform.Position.Y / Factor;

                Vector2 position = new Vector2(x, y) + offset;
                Color color = _transparentColor;

                if (entity.UserData == "Player") color = _playerColor;
                else color = _neutralColor;

                graphics.SpriteBatch.Begin();
                graphics.SpriteBatch.Draw(graphics.Pixel, new Rectangle((int)position.X, (int)position.Y, (int)entity.Rendering.Size.X / Factor, (int)entity.Rendering.Size.Y / Factor), color);
                graphics.SpriteBatch.End();
            }

            base.Draw(gameTime);
        }
    }
}


text:
package com.arjuna.ats.internal.jta.tools.osb.mbean.jta;

import com.arjuna.ats.arjuna.tools.osb.annotation.MXBeanDescription;

/**
 * @deprecated as of 5.0.5.Final In a subsequent release we will change packages names in order to
 * provide a better separation between public and internal classes.
 */
@Deprecated // in order to provide a better separation between public and internal classes.
@MXBeanDescription("Management view of an CommitMarkableResource participating in a transaction")
public interface CommitMarkableResourceRecordBeanMBean extends XAResourceMBean {
}


text:
package org.apache.solr.client.solrj.impl;

import org.apache.http.client.HttpClient;

import java.util.Collection;

/**
 * @deprecated Use {@link org.apache.solr.client.solrj.impl.CloudSolrClient}
 */
@Deprecated
public class CloudSolrServer extends CloudSolrClient {

  public CloudSolrServer(String zkHost) {
    super(zkHost);
  }

  public CloudSolrServer(String zkHost, HttpClient httpClient) {
    super(zkHost, httpClient);
  }

  public CloudSolrServer(Collection<String> zkHosts, String chroot) {
    super(zkHosts, chroot);
  }

  public CloudSolrServer(Collection<String> zkHosts, String chroot, HttpClient httpClient) {
    super(zkHosts, chroot, httpClient);
  }

  public CloudSolrServer(String zkHost, boolean updatesToLeaders) {
    super(zkHost, updatesToLeaders);
  }

  public CloudSolrServer(String zkHost, boolean updatesToLeaders, HttpClient httpClient) {
    super(zkHost, updatesToLeaders, httpClient);
  }

  public CloudSolrServer(String zkHost, LBHttpSolrClient lbClient) {
    super(zkHost, lbClient);
  }

  public CloudSolrServer(String zkHost, LBHttpSolrClient lbClient, boolean updatesToLeaders) {
    super(zkHost, lbClient, updatesToLeaders);
  }
}


text:
class MultipleDistrictsController < ApplicationController

  def show
    @multiple_district = MultipleDistrict.where(oid: params['id'])
  end

  def my_multiple_district
    @multiple_district = MultipleDistrict.find_by_member_id session[:current_user]
    render action: 'show'
  end
end


text:
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>
        <groupId>org.wso2.carbon</groupId>
        <artifactId>bam-data-agents</artifactId>
        <version>4.3.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.wso2.carbon</groupId>
    <artifactId>org.wso2.carbon.bam.message.tracer.handler</artifactId>
    <packaging>bundle</packaging>
    <version>4.3.0-SNAPSHOT</version>
    <name>WSO2 Carbon - BAM - Message Tracer Publisher</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>

                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Name>${project.artifactId}</Bundle-Name>
                        <Axis2Module>${project.artifactId}-${project.version}</Axis2Module>
                        <Export-Package>
                            org.wso2.carbon.bam.message.tracer.handler.*
                        </Export-Package>
                        <Import-Package>
                            javax.servlet;version="${imp.pkg.version.javax.servlet}",
                            javax.servlet.http;version="${imp.pkg.version.javax.servlet}",
                            org.apache.axis2.*; version=${orbit.version.axis2}; version=0.0.0,*;
                            resolution:=optional
                        </Import-Package>
                        <DynamicImport-Package>*</DynamicImport-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.axis2.wso2</groupId>
            <artifactId>axis2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.wso2.carbon</groupId>
            <artifactId>org.wso2.carbon.bam.data.publisher.util</artifactId>
        </dependency>
        <dependency>
            <groupId>org.wso2.carbon</groupId>
            <artifactId>org.wso2.carbon.utils</artifactId>
        </dependency>
        <dependency>
            <groupId>org.wso2.carbon</groupId>
            <artifactId>org.wso2.carbon.core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.wso2.carbon</groupId>
            <artifactId>org.wso2.carbon.databridge.agent.thrift</artifactId>
        </dependency>
        <dependency>
            <groupId>org.wso2.carbon</groupId>
            <artifactId>org.wso2.carbon.databridge.commons</artifactId>
        </dependency>
    </dependencies>

</project>


text:
layout: post
title: "Your Free Plan is killing your SaaS app"
date: "2015-06-23"
disqus: true
categories: saas
---

If you listen to a sales guy or customer they will encourage you to add a free plan to your SaaS app.

The sales guy with a growth quota to meet:
> "Of course we should have a free plan. Think of all the users we will get!"

The customer:
> "I will certainly not use your app if I have to pay. So give it to me free forever. Think of the exposure you'll get!"

You:
> "Ok. Here, take my car keys too."

## Example: Evernote gets it wrong

Do you know Evernote? The app has always had a great product idea (Note taking with sync everywhere) and decent execution combined with terrible pricing.

I use Evernote every day and I still haven't paid them. Why? Because there are a free plan that works for my use case. Evernote are big enough now to ditch their free plan entirely (make it read-only) and charge for what I think is a good product.

## Your free customers are a nightmare

When I started my guestbook service back in '98 I was early with a SaaS app. I was dumb enough to have a free version of the service and a pro version that users had to pay for.

The ones who paid me were much friendlier in the support forums, asked reasonable questions and never complained about the few downtimes we had.

The ones on the free plan were much more aggressive, asked for more features and still never bought anything when the features were implemented. I guess I spent about 10x the time on free users vs paid users.

Don't do this. Your time should be spent on the paying customers. _If your offer is not good enough to attract paying customers you want to spend your time on improving your offer – not on giving support to people who are not paying a dime._

## But what about marketing value?

Your free plan users will bring more users to your free plan. Is that really what you are after?

You should be generous - but focus your generosity on the people who are actually paying you. Giving their more value for their money should be a much higher priority than bringing on new free users.

## Do you have any alternative pricing models?

Yes, I'm glad you asked. Start by removing your free plan. While you're at it, think about removing your cheapest plan as well.

What I'm saying is that **$19 - $59 – $99** is much better pricing options than **$0 - $9 - $19 - $59 - $99**. And if you don't know what you should call your plans, [check out my earlier post on alternative pricing plan names](http://david.elbe.me/saas/2015/05/24/alternative-names-for-web-app-pricing-plans.html).

And if you are absolutely sure that you need to, give your users a free trial period of 7, 14 or 30 days to evaluate your service. Giving it away free for a short period is much better than free forever. But I would recommend charging from day one.

Your app has a value, right?


text:
<?php
class Kwc_Blog_Comments_QuickWrite_Component extends Kwc_Posts_QuickWrite_Component
{
    public static function getSettings()
    {
        $ret = parent::getSettings();
        $ret['generators']['child']['component']['form'] = 'Kwc_Blog_Comments_QuickWrite_Form_Component';
        $ret['plugins'] = array();
        return $ret;
    }
}


text:
#include <aws/core/client/AWSError.h>
#include <aws/core/utils/HashingUtils.h>
#include <aws/pricing/PricingErrors.h>

using namespace Aws::Client;
using namespace Aws::Pricing;
using namespace Aws::Utils;

namespace Aws
{
namespace Pricing
{
namespace PricingErrorMapper
{

static const int INVALID_PARAMETER_HASH = HashingUtils::HashString("InvalidParameterException");
static const int NOT_FOUND_HASH = HashingUtils::HashString("NotFoundException");
static const int INVALID_NEXT_TOKEN_HASH = HashingUtils::HashString("InvalidNextTokenException");
static const int EXPIRED_NEXT_TOKEN_HASH = HashingUtils::HashString("ExpiredNextTokenException");
static const int INTERNAL_ERROR_HASH = HashingUtils::HashString("InternalErrorException");

AWSError<CoreErrors> GetErrorForName(const char* errorName)
{
  int hashCode = HashingUtils::HashString(errorName);

  if (hashCode == INVALID_PARAMETER_HASH)
  {
    return AWSError<CoreErrors>(static_cast<CoreErrors>(PricingErrors::INVALID_PARAMETER), false);
  }
  else if (hashCode == NOT_FOUND_HASH)
  {
    return AWSError<CoreErrors>(static_cast<CoreErrors>(PricingErrors::NOT_FOUND), false);
  }
  else if (hashCode == INVALID_NEXT_TOKEN_HASH)
  {
    return AWSError<CoreErrors>(static_cast<CoreErrors>(PricingErrors::INVALID_NEXT_TOKEN), false);
  }
  else if (hashCode == EXPIRED_NEXT_TOKEN_HASH)
  {
    return AWSError<CoreErrors>(static_cast<CoreErrors>(PricingErrors::EXPIRED_NEXT_TOKEN), false);
  }
  else if (hashCode == INTERNAL_ERROR_HASH)
  {
    return AWSError<CoreErrors>(static_cast<CoreErrors>(PricingErrors::INTERNAL_ERROR), false);
  }
  return AWSError<CoreErrors>(CoreErrors::UNKNOWN, false);
}

} // namespace PricingErrorMapper
} // namespace Pricing
} // namespace Aws


text:
package org.h2.samples;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import org.h2.engine.Constants;
import org.h2.security.SHA256;
import org.h2.store.FileStore;
import org.h2.store.FileStoreInputStream;
import org.h2.store.FileStoreOutputStream;
import org.h2.store.fs.FileUtils;
import org.h2.tools.CompressTool;
import org.h2.tools.RunScript;
import org.h2.tools.Script;

/**
 * This sample application shows how to manually
 * create an encrypted and compressed script file.
 */
public class CreateScriptFile {

    /**
     * This method is called when executing this sample application from the
     * command line.
     *
     * @param args the command line parameters
     */
    public static void main(String... args) throws Exception {

        String file = "test.txt";
        String cipher = "AES";
        String filePassword = "password";
        String compressionAlgorithm = "DEFLATE";

        String url = "jdbc:h2:mem:test";
        String user = "sa", dbPassword = "sa";

        PrintWriter w = openScriptWriter(file,
                compressionAlgorithm,
                cipher, filePassword, "UTF-8");
        w.println("create table test(id int primary key);");
        w.println("insert into test select x from system_range(1, 10);");
        w.close();

        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection(url, user, dbPassword);
        RunScript.main(
                "-url", url,
                "-user", user, "-password", dbPassword,
                "-script", file,
                "-options",
                "compression", compressionAlgorithm,
                "cipher", cipher,
                "password", "'" + filePassword + "'"
        );
        Script.main(
                "-url", url,
                "-user", user, "-password", dbPassword,
                "-script", file,
                "-options",
                "compression", compressionAlgorithm,
                "cipher", cipher, "password", "'" + filePassword + "'"
        );
        conn.close();

        LineNumberReader r = openScriptReader(file,
                compressionAlgorithm,
                cipher, filePassword, "UTF-8");
        while (true) {
            String line = r.readLine();
            if (line == null) {
                break;
            }
            System.out.println(line);
        }
        r.close();

    }

    /**
     * Open a script writer.
     *
     * @param fileName the file name (the file will be overwritten)
     * @param compressionAlgorithm the compression algorithm (uppercase)
     * @param cipher the encryption algorithm or null
     * @param password the encryption password
     * @param charset the character set (for example UTF-8)
     * @return the print writer
     */
    public static PrintWriter openScriptWriter(String fileName,
            String compressionAlgorithm,
            String cipher, String password,
            String charset) throws IOException {
        try {
            OutputStream out;
            if (cipher != null) {
                byte[] key = SHA256.getKeyPasswordHash("script", password.toCharArray());
                FileUtils.delete(fileName);
                FileStore store = FileStore.open(null, fileName, "rw", cipher, key);
                store.init();
                out = new FileStoreOutputStream(store, null, compressionAlgorithm);
                out = new BufferedOutputStream(out, Constants.IO_BUFFER_SIZE_COMPRESS);
            } else {
                out = FileUtils.newOutputStream(fileName, false);
                out = new BufferedOutputStream(out, Constants.IO_BUFFER_SIZE);
                out = CompressTool.wrapOutputStream(out,
                        compressionAlgorithm, "script.sql");
            }
            return new PrintWriter(new OutputStreamWriter(out, charset));
        } catch (Exception e) {
            throw new IOException(e.getMessage(), e);
        }
    }

    /**
     * Open a script reader.
     *
     * @param fileName the file name (the file will be overwritten)
     * @param compressionAlgorithm the compression algorithm (uppercase)
     * @param cipher the encryption algorithm or null
     * @param password the encryption password
     * @param charset the character set (for example UTF-8)
     * @return the script reader
     */
    public static LineNumberReader openScriptReader(String fileName,
            String compressionAlgorithm,
            String cipher, String password,
            String charset) throws IOException {
        try {
            InputStream in;
            if (cipher != null) {
                byte[] key = SHA256.getKeyPasswordHash("script", password.toCharArray());
                FileStore store = FileStore.open(null, fileName, "rw", cipher, key);
                store.init();
                in = new FileStoreInputStream(store, null,
                        compressionAlgorithm != null, false);
                in = new BufferedInputStream(in, Constants.IO_BUFFER_SIZE_COMPRESS);
            } else {
                in = FileUtils.newInputStream(fileName);
                in = new BufferedInputStream(in, Constants.IO_BUFFER_SIZE);
                in = CompressTool.wrapInputStream(in, compressionAlgorithm, "script.sql");
                if (in == null) {
                    throw new IOException("Entry not found: script.sql in " + fileName);
                }
            }
            return new LineNumberReader(new InputStreamReader(in, charset));
        } catch (Exception e) {
            throw new IOException(e.getMessage(), e);
        }
    }

}


text:
for (portal of document.getElementsByTagName('portal')) {
  portal.onclick = (event) => {
    event.target.activate();
  };
}


text:
var mailin = require('mailin'),
    fs = require('fs'),
    socket = require('socket.io-client')('http://localhost:1337'),
    shortid = require('shortid');

mailin.start({
  port: 25,
  host: '93.158.205.18',
  disableWebhook: true // Disable the webhook posting.
});

/* Access simplesmtp server instance. */
mailin.on('authorizeUser', function(connection, username, password, done) {
   console.log('mailin authorizeUser', connection, username, password);
  if (username == "johnsmith" && password == "mysecret") {
    done(null, true);
  } else {
    done(new Error("Unauthorized!"), false);
  }
});

/* Event emitted when a connection with the Mailin smtp server is initiated. */
//mailin.on('startMessage', function (connection) {
//
//});

/* Event emitted after a message was received and parsed. */
mailin.on('message', function (connection, data, content) {
    console.log('mailin message', data.from, data.subject);
    /* Do something useful with the parsed message here.
     * Use parsed message `data` directly or use raw message `content`. */
    var whitelist = ['confer.zone'];
    var links = [];
    var slug = shortid.generate();

    //loop over attachments
    for(var i = 0; i < data.attachments.length; i++){
        links.push({
            title: data.attachments[i].generatedFileName,
            filename: data.attachments[i].generatedFileName,
            content: data.attachments[i].content
        });
        //fs.writeFile(fpath + data.attachments[i].generatedFileName, data.attachments[i].content, function(err) {});
    }

    var re = /(.*)@(.*)/;
    var from = data.from[0];
    var title = data.subject;
    var body = data.text;

    var res_slug = '';
    var mail_slug = '';
    var mail_domain = '';

    var mail_item = {
        slug: slug,
        mail_slug: mail_slug,
        from: from,
        title: title,
        body: body,
        links: links
    };

    for(var i = 0; i < data.to.length; i++){
        res_slug = re.exec(data.to[i].address);
        if(res_slug.length > 1){
            mail_domain = res_slug[2];
            mail_item.mail_slug = res_slug[1];

            if(whitelist.indexOf(mail_domain) >= 0){
                console.log('mailin accepted: '+ res_slug[1] + '@' + res_slug[2]);
                socket.emit('mail item add', mail_item);
            }else{
                console.log('mailin rejected: ' + res_slug[1] + '@' + res_slug[2]);
                console.log(mail_item);
            }
        }
    }
});

socket.on('mail item add', function(result){
    console.log('mail item add: id=' + result._id);
});


text:
A Bovespa fechou no vermelho nesta terça-feira (27). O Ibovespa (principal índice da Bolsa brasileira) perdeu 2,6%, a 50.091,55 pontos, puxado principalmente pelas ações da Petrobras (PETR3, PETR4), que tiveram forte queda de 4%.

Foi a maior perda diária da Bolsa desde o dia 2 de julho, quando o Ibovespa perdeu 4,24%.

As ações de Eike Batista também tiveram forte queda, e ajudaram a puxar o índice para baixo.

O dólar comercial fechou em queda de 0,65%, a R$ 2,368 na venda.

Tensão na Síria preocupa investidores
A possibilidade de que os Estados Unidos e seus aliados possam começar a intervir militarmente no conflito da Síria deixava os investidores em estado de alerta nesta terça.

No geral, os investidores estrangeiros estavam realocando recursos, tirando os investimentos de países emergentes e colocando-os em opções consideradas mais "seguras".

A cotação do ouro no mercado à vista, por exemplo, chegou a atingir seu maior patamar em 11 semanas.

Além disso, as tensões geopolíticas afetam os negócios de commodities, como o petróleo, que é importado pela Petrobras.

A ação preferencial da Petrobras (PETR4), uma das mais negociadas da Bolsa, fechou em queda de 4,07%, a R$ 17,45; a ação ordinária (PETR3) perdeu 3,33%, a R$ 16,57.

Ações de destaque
Apenas três das 74 ações que compõem o principal índice da Bolsa fecharam em alta nesta terça: a Marfrig (MRFG3), que ganhou 0,85%, a R$ 5,90; a Oi (OIBR3), com alta de 0,49%, a R$ 4,14; e a CPFL (CPFE3), que subiu 0,46%, a R$ 19,49.

Entre as maiores perdas, destaque para as ações de Eike Batista: a petroleira OGX (OGXP3) desabou 14,8%, a R$ 0,69.

Construtoras também apareceram entre as principais baixas. A PDG (PDGR3) afundou 6,72%, a R$ 2,22, e a Brookfield (BISA3) perdeu 5,56%, a R$ 1,70.

Entre as ações de maior peso no índice, a preferencial da Vale (VALE5) perdeu 1,46%, a R$ 31,73.

Intervenção do BC no dólar
O Banco Central vendeu todos os 10 mil contratos ofertados em um leilão de equivalente à venda de dólares no futuro no começo da manhã. A operação faz parte do plano de intervenções no mercado do câmbio anunciado na semana passada.

O BC anunciou ainda que fará nos dias 16, 17 e 18 de setembro leilões de rolagem de 135.300 contratos de swap cambial tradicional (equivalentes à venda de dólares no futuro) com vencimento em 1º de outubro.

 Esse cronograma coincide com as datas da reunião do Federal Reserve, banco central norte-americano, marcada para 17 e 18 de setembro e na qual investidores acreditam que o banco central dos EUA poderá decidir reduzir suas compras mensais de títulos.

Bolsas Internacionais
A instabilidade política e militar na Síria acabou afetando a maioria dos principais mercados internacionais.

As ações dos Estados Unidos, por exemplo, tiveram seu pior dia desde junho. O índice Dow Jones recuou 1,14%, para 14.776 pontos. O índice Standard & Poor's 500 teve desvalorização de 1,59%, para 1.630 pontos. A Nasdaq caiu 2,16%, para 3.578 pontos.

As ações europeias sofreram a maior queda diária em dois meses. O índice FTSEurofirst 300 fechou em queda de 1,7%, a 1.202 pontos. O índice das ações mais negociadas da zona do euro Euro STOXX 50 recuou 2,6%, sua maior queda diária desde junho, para 2.749 pontos.

Em Londres, o índice Financial Times caiu 0,79%. Em Frankfurt, o índice DAX recuou 2,28%. Em Paris, o índice CAC-40 teve queda de 2,42%.

As ações asiáticas também caíram. Os mercados emergentes foram os mais afetados: as ações das Filipinas recuaram 3,96%, e as da Indonésia perderam 3,71%.

O índice Nikkei, do Japão, fechou em baixa de 0,69%; Hong Kong perdeu 0,59, Seul caiu 0,11%, Taiwan teve baixa de 0,94% e Cingapura cedeu 1,63%.

A Bolsa chinesa de Xangai subiu 0,34%, e Sydney avançou 0,11%.

(Com Reuters)


text:
module Intercode::Import::Procon::Tables
  extend ActiveSupport::Autoload

  autoload :Attendances
  autoload :Conventions
  autoload :ConventionStaffAttendances
  autoload :Events
  autoload :People
  autoload :ProposedEvents
end